2

我目前从 ByteBuffer 读取一个短值并将其应用于 int。

byte[] data = new byte{0x90, 0xAF};
ByteBuffer b = ByteBuffer.wrap(data);
int value = b.getShort();

value包含现在0xFFFF90AF而不是0x90AF。我的解决方案是通过以下方式对值进行位掩码0xFFFFint value = b.getShort() & 0xFFFF;

我认为向上转换总是可能的,因为short它小于int. 有人可以解释为什么它会这样吗?

4

2 回答 2

6

short已签名,并且在转换为int. 0x90AF 是负数short,所以结果是负数int。您屏蔽它的解决方案是正确的。

于 2013-08-17T17:50:54.223 回答
2

short是一个有符号数量,但你很幸运:还有char,它是 Java 中唯一的无符号原始类型,大小与short. 尝试使用

int value = b.getChar();

这是一个经常被忽视的事实,它是charJava 中成熟的数字类型。只是它的字符串表示暴露了它的特殊地位。

于 2013-08-17T17:57:07.217 回答