Java ByteBuffer发出有符号和无符号类型的问题,将字节数组转换为整数

Jak*_*les 4 java unsigned signed bytebuffer

我期待这个:

ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == 222
Run Code Online (Sandbox Code Playgroud)

但是以下情况属实:

ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == -570425344
Run Code Online (Sandbox Code Playgroud)

我如何解决Java在签名/未签名类型中的许多限制,或者我是否需要完全自己滚动?

tra*_*god 5

码:

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);
}
Run Code Online (Sandbox Code Playgroud)

安慰:

BIG_ENDIAN
true
LITTLE_ENDIAN
true
Run Code Online (Sandbox Code Playgroud)

附录:作为参考,"新创建的字节缓冲区的顺序始终是BIG_ENDIAN." -ByteBuffer#order()