自从我在位/字节级别进行操作以来已经有一段时间了,所以如果这很简单,请原谅我。
我正在通过 Java 应用程序中的 TCP 套接字从嵌入式设备接收数据。数据是小端(最低有效字节优先),我目前正在尝试short
从数据数组中获取值。为此,我使用以下代码:
byte[] valBytes = {data[0], data[1]};
short val = EndianArrayUtils.getShortFromLittleEndianRange(valBytes);
这适用于正数,但是当short
应该为 -1 时,我得到的是 -2。产生 -2 的数据是:
byte[] valBytes = {(byte)0xff, (byte)0xff};
short val = EndianArrayUtils.getShortFromLittleEndianRange(valBytes);
我错过了什么吗?二进制补码中的 -1 应该是11111111 11111111
正确的吗?
编辑
我完全忘记了我是真正写的人EndianArrayUtils
。该getShortFromLittleEndianRange
方法的代码是
public static short getShortFromLittleEndianRange(byte[] range){
return (short)((short)(range[1] >> 8) + (short)(range[0]));
}
显然,它在负数上的运作方式有问题。