java从字节数组转换为short生成错误的负值
我已经有一段时间没有在位/字节级别进行操作了,所以如果这很简单,请原谅我
我正在通过Java应用程序中的TCPsocket从嵌入式设备接收数据。数据是little endian(最低有效字节优先),我目前正试图从数据数组中获取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);
我错过什么了吗-二分之一的补语应该是11111111 11111111
正确吗
编辑
我完全忘了我才是真正写EndianArrayUtils
的人。getShortFromLittleEndianRange
方法的代码是
public static short getShortFromLittleEndianRange(byte[] range){
return (short)((short)(range[1] >> 8) + (short)(range[0]));
}
很明显,这在负数上是有问题的
# 1 楼答案
我会用ByteBuffer
印刷品
如果你读入字节缓冲区,你根本不需要
byte[]
修正你的例子