Как читать отрицательные байтовые значения в Java меньше -128 - PullRequest
5 голосов
/ 27 апреля 2009

Я читаю данные из другой системы, используя последовательный порт. Я читаю пакеты по 133 байта. Второй байт является номером пакета, а третий байт является отрицательным значением номера пакета.

Проблема в том, что тип byte имеет диапазон от -128 до 127. Когда я пытаюсь прочитать -129 (вне диапазона байтов), это даст значение как 127.

Что я должен сделать, чтобы получить -129?

Ответы [ 4 ]

8 голосов
/ 27 апреля 2009

Вы должны определить, какой диапазон значений байтов вы ожидаете получить. если вы ожидаете диапазон от -129 до 126, например, вы можете использовать.

int min = 129;
int i = ((b + min) & 0xFF) - min;

Кстати, вы не можете иметь более 256 значений.

6 голосов
/ 27 апреля 2009

Вы получаете 127, потому что байт составляет всего 8 бит, и поэтому значение оборачивается. -129 не помещается в байт Java. Вы должны будете изменить свою программу, чтобы использовать как минимум шорты, если хотите вписать -129 в заданную переменную.

4 голосов
/ 27 апреля 2009

Я должен немного догадаться, поскольку не знаю протокола.

Возможно, оба значения должны рассматриваться в протоколе как беззнаковые (положительные) байты, они вы можете конвертировать их в целые позже.

// 0-255
int plus = (int)(plusByte & 0xFF);

// -255 - 0
int minus = 0 - (int)(minusByte & 0xFF);

Это как-то связано с этим Пэт 6313763 ? Но так как длина пакета фиксирована, я ее не получаю.

Невозможно хранить в байте "большие" числа, чем диапазон 256. Может быть, вы неправильно поняли протокол, а его старший и младший биты int хранятся в двух байтах?

1 голос
/ 27 апреля 2009

Значения меньше -128 не помещаются в подписанный байт. Вам нужно прочитать короткий и т. Д.

...