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 に答える