我正在使用串行端口从另一个系统读取数据。我正在读取 133 字节的数据包。第二个字节是包号,第三个字节是包号的负值。
问题是该类型byte
的范围是 -128 到 127。当我尝试读取 -129(超出字节范围)时,它会将值设为 127。
我应该怎么做才能得到-129?
您必须确定您期望字节值具有的范围。例如,如果您期望范围为 -129 到 126,则可以使用。
int min = 129;
int i = ((b + min) & 0xFF) - min;
顺便说一句,您的值不能超过 256。
你得到 127 因为一个字节只有 8 位,所以这个值是环绕的。-129 不适合 java 字节。如果您想在给定变量中拟合 -129,则至少必须修改程序以使用短裤。
我不得不在这里猜测一下,因为我不知道协议。
也许这两个值都应该在协议中被视为无符号(正)字节,您可以稍后将它们转换为整数。
// 0-255
int plus = (int)(plusByte & 0xFF);
// -255 - 0
int minus = 0 - (int)(minusByte & 0xFF);
它与美国专利 6313763 有关吗?但由于数据包的长度是固定的,我不明白。
不可能在一个字节中存储比范围 256 更大的数字。也许你误解了协议,它的 int 的高位和低位存储在两个字节中?
小于 -128 的值不适合有符号字节。您需要阅读短文等。