2009-04-27 6 views
5

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

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

Что я должен делать так что я могу получить -129?

ответ

6

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

+0

(int) (byteval & 0xFF) он вернет правильные значения после + 127, т. Е. -128 как 128, но я не получаю для нужных значений – 2009-04-27 06:18:45

+0

Ну, конечно. Байтом может быть диапазон любых 256 значений. Если вы знаете, что байт будет равен нулю или больше, он может быть от 0 до 255. Говоря «byteval & 0xFF», вы более или менее говорите компилятору, что это целое число без знака, что означает, что самое низкое число равна нулю. Вы говорите, что у вас есть значение байта, которое заранее известно, чтобы быть отрицательным? –

8

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

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

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

4

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

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

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

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

Это связано с этим Us Pat 6313763? Но по мере того как длина пакета фиксирована, я не понимаю.

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

1

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

Смежные вопросы