Я хочу отправлять значения между 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 я никогда не получаю правильные байты, но совершенно разные контрольные суммы.Поскольку отправка сообщения является побайтовой к остальной части отправляемой информации, я думаю, что есть некоторая проблема с контрольной суммой.Можно ли каким-то образом использовать псевдо "незапятнанные" байты или есть какой-то другой намек на то, что могло произойти не так?