如何读取Java中的负字节值小于-128

时间:2009-04-27 06:05:42

标签: java types core xmodem

我正在使用串口从另一个系统读取数据。我正在读取133字节的数据包。第二个字节是数据包编号,第三个字节是数据包编号的负值。

问题是类型byte的范围是-128到127.当我尝试读取-129(在字节范围之外)时,它会将值赋予127.

我该怎么做才能得到-129?

4 个答案:

答案 0 :(得分:8)

您必须确定您希望字节值具有的范围。例如,如果您希望范围-129到126,则可以使用。

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

BTW你的价值不能超过256。

答案 1 :(得分:6)

你得到127,因为一个字节只有8位,因此值正在回绕。 -129不适合java字节。如果要在给定变量中拟合-129,则必须修改程序以至少使用短路。

答案 2 :(得分:4)

我不得不在这里猜一点,因为我不知道协议。

可能两个值都应该被视为协议中的无符号(正)字节, 他们可以稍后将它们转换为int。

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

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

它与此Us Pat 6313763有关吗?但是由于数据包的长度是固定的,我不明白。

无法在一个字节中存储大于256的“更大”数字。也许你误解了协议,它的两个字节存储的int的高位和低位?

答案 3 :(得分:1)

小于-128的值不适合带符号的字节。你需要阅读简短的等等。