私はこれを期待していました:
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == 222
ただし、次のことが当てはまります。
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == -570425344
署名付き/署名なしの型に関する Java の多くの制限のもう 1 つを回避するにはどうすればよいですか?
私はこれを期待していました:
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == 222
ただし、次のことが当てはまります。
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == -570425344
署名付き/署名なしの型に関する Java の多くの制限のもう 1 つを回避するにはどうすればよいですか?
コード:
public static void main(String[] args) {
ByteBuffer bb = ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 });
System.out.println(bb.order());
System.out.println(bb.getInt() == 222);
bb.rewind();
bb.order(ByteOrder.LITTLE_ENDIAN);
System.out.println(bb.order());
System.out.println(bb.getInt() == -570425344);
}
コンソール:
BIG_ENDIAN
true
LITTLE_ENDIAN
true
補遺: 参考までに、「新しく作成されたバイト バッファの順序は常にBIG_ENDIAN
.」—<a href="http://download.oracle.com/javase/6/docs/api/java/nio/ByteBuffer.html #order%28%29" rel="nofollow">ByteBuffer#order()
観察した結果は、リトル エンディアン マシンでは正しいものです。以下を実行するLITTLE_ENDIAN
と、答えが得られると思います。
ByteBuffer bb = ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 });
System.out.println(bb.order());
バッファーのビッグ エンディアン順序を強制する場合は、次の手順を実行します。
ByteBuffer bb = ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 });
bb.order(ByteOrder.BIG_ENDIAN);
System.out.println(bb.order());
System.out.println(bb.getInt( ));
印刷する必要があります:
BIG_ENDIAN
222