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

标签 java unsigned signed bytebuffer

我期望这样:

ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == 222

但是以下是正确的:

ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == -570425344

我如何解决 Java 对有符号/无符号类型的许多限制中的另一个问题,或者我是否需要完全自己动手?

最佳答案

代码:

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 。”— ByteBuffer#order()

关于将字节数组转换为整数的有符号和无符号类型的 Java ByteBuffer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366560/

相关文章:

java - 使用 Swing 组件调整处理 Canvas 大小时闪烁

c++ - 在 vector 循环中使用 int 而不是 size_t 可以吗?

c++ - 如何从 uint32_t 打印十六进制?

C 编译器无法识别 unsigned long

java - LIKE - hibernate 命名查询

java - 从 Eclipse 启动 wildfly-swarm "org.jboss.modules.ModuleLoadException"

c - POSIX `read()` 的 `buf` 应该是 `signed` 还是 `unsigned`?这有关系吗?

c++ - C/C99/C++/C++x/GNU C/GNU C99 中枚举的签名

java - 关于有符号字节的二进制转换为十六进制的问题

java - 当从 fragment 更改我的 Activity 标题时会导致崩溃