Android - отправка байтовой контрольной суммы в приложение c - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу отправлять значения между Java и встроенной программой C через последовательное соединение.Для значений используется контрольная сумма CRC16.Встроенное приложение уже получает значения из приложений C ++ и C #.

С Java я уже создаю правильную контрольную сумму, например, 63121, и сохраню ее в int.Теперь проблема в том, как преобразовать их в 2 байта.

В общем, я пытаюсь сделать то же самое, что и на других языках:

char highChar = (char)(calc >> 8);
char lowChar = (char)(calc & 0xff);

Если я отлаживаю это, я вижу, что значение highchar is 'ö' 246 и lowchar is '\u0091' 145.

Встроенное приложение C будет понимать байтовый массив, оканчивающийся на F6 92 (246 146 в шестнадцатеричном формате).

Теперь вот моя проблема.

246 будет 11110110 145 будет 10010001

Я использую

byte high = (byte)highChar;
byte low = (byte)lowChar;

Поскольку в Java есть байты со знаком вместо других без знака, я вижу высокий = -10 (11110110) низкий =-111 (10010001)

В C я никогда не получаю правильные байты, но совершенно разные контрольные суммы.Поскольку отправка сообщения является побайтовой к остальной части отправляемой информации, я думаю, что есть некоторая проблема с контрольной суммой.Можно ли каким-то образом использовать псевдо "незапятнанные" байты или есть какой-то другой намек на то, что могло произойти не так?

...