gpt4 book ai didi

java - 将无符号整数值插入字节缓冲区,保持二进制表示形式

转载 作者:行者123 更新时间:2023-11-30 03:37:14 26 4
gpt4 key购买 nike

我正在尝试将以下二进制表示形式放入 4 个字节的字节缓冲区中。但由于Java不执行无符号操作,我遇到了麻烦:11111111000000001111111100000000

ByteBuffer bb = ByteBuffer.allocate(8);

bb.putInt(Integer.parseInt("11111111000000001111111100000000", 2));
//throws numberformatexception

由于二进制补码的工作原理,否定最高有效位似乎会更改二进制字符串值:

bb.putInt(Integer.parseInt("-1111111000000001111111100000000", 2));
System.out.println(Integer.toBinaryString(bb.getInt(0)));
//prints 10000000111111110000000100000000

该值必须完全采用这种二进制格式,这一点很重要,因为稍后它将被视为无符号整数。我应该如何将值(以及以 1 开头的 future 值)添加到字节缓冲区?

最佳答案

首先将其解析为long,然后转换结果:

int value = (int) Long.parseLong("11111111000000001111111100000000", 2);

这解决了 int 空间不足的问题,因为 long 中有足够的空间。转换后,该值将最终为负 int,但这很好 - 它最终会相应地出现在字节缓冲区中。

编辑:如评论中所述,在 Java 8 中您可以使用 Integer.parseUnsignedInt("...", 2)

关于java - 将无符号整数值插入字节缓冲区,保持二进制表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27548234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com