我目前从ByteBuffer读取一个短值并将其应用于int。
byte[] data = new byte{0x90, 0xAF};
ByteBuffer b = ByteBuffer.wrap(data);
int value = b.getShort();
但value
现在包含0xFFFF90AF
而不包含0x90AF
。
我的解决方案是按0xFFFF
:int value = b.getShort() & 0xFFFF;
我认为始终可以进行向上转换,因为short
小于int
。有人可以解释为什么它会像这样吗?
答案 0 :(得分:6)
short
已签名,并在转换为int
时保留。 0x90AF为负short
,因此结果为负int
。你掩盖它的解决方案是正确的。
答案 1 :(得分:2)
short
是已签名的数量,但您很幸运:还有char
,它是Java中唯一的 unsigned 基元类型,并且大小相同为short
。尝试使用
int value = b.getChar();
char
是Java中一个完整的数字类型,这是一个经常被忽视的事实。只有它的字符串表示才能背叛它的特殊地位。