我正在使用串口从另一个系统读取数据。我正在读取133字节的数据包。第二个字节是数据包编号,第三个字节是数据包编号的负值。
问题是类型byte
的范围是-128到127.当我尝试读取-129(在字节范围之外)时,它会将值赋予127.
我该怎么做才能得到-129?
答案 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的值不适合带符号的字节。你需要阅读简短的等等。