5

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

问题是该类型byte的范围是 -128 到 127。当我尝试读取 -129(超出字节范围)时,它会将值设为 127。

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

4

4 回答 4

8

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

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

顺便说一句,您的值不能超过 256。

于 2009-04-27T06:28:13.817 回答
6

你得到 127 因为一个字节只有 8 位,所以这个值是环绕的。-129 不适合 java 字节。如果您想在给定变量中拟合 -129,则至少必须修改程序以使用短裤。

于 2009-04-27T06:12:00.097 回答
4

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

也许这两个值都应该在协议中被视为无符号(正)字节,您可以稍后将它们转换为整数。

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

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

它与美国专利 6313763 有关吗?但由于数据包的长度是固定的,我不明白。

不可能在一个字节中存储比范围 256 更大的数字。也许你误解了协议,它的 int 的高位和低位存储在两个字节中?

于 2009-04-27T07:48:18.040 回答
1

小于 -128 的值不适合有符号字节。您需要阅读短文等。

于 2009-04-27T11:00:46.300 回答