現在、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
。誰かがなぜこのように振る舞うのか説明できますか?