int to cast,奇怪的行为

时间:2013-08-17 17:49:14

标签: java casting bytebuffer

我目前从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。有人可以解释为什么它会像这样吗?

2 个答案:

答案 0 :(得分:6)

short已签名,并在转换为int时保留。 0x90AF为负short,因此结果为负int。你掩盖它的解决方案是正确的。

答案 1 :(得分:2)

short是已签名的数量,但您很幸运:还有char,它是Java中唯一的 unsigned 基元类型,并且大小相同为short。尝试使用

int value = b.getChar();

char是Java中一个完整的数字类型,这是一个经常被忽视的事实。只有它的字符串表示才能背叛它的特殊地位。