Java ByteBuffer 将字节数组转换为整数时出现有符号和无符号类型问题
我预料到了这一点:
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == 222
然而,以下情况是正确的:
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == -570425344
我如何解决 Java 对有符号/无符号类型的许多限制,或者我是否需要完全推出自己的限制?
I expected this:
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == 222
However the following is true:
ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }).getInt() == -570425344
How do I get around this yet another of Java's many limitations with signed/unsigned types or do I need to completely roll my own?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
代码:
控制台:
附录:供参考,“新创建的字节缓冲区的顺序始终为
BIG_ENDIAN
。”—ByteBuffer#order()< /代码>
Code:
Console:
Addendum: For reference, "The order of a newly-created byte buffer is always
BIG_ENDIAN
."—ByteBuffer#order()
您观察到的结果对于小端机器来说是正确的。我怀疑如果您运行以下命令,您将得到
LITTLE_ENDIAN
作为答案。如果您想强制缓冲区采用大端排序,请执行以下操作:
应打印出:
The result you observe is correct for a little-endian machine. I suspect if you run the following, you'll get
LITTLE_ENDIAN
as the answer.If you want to force big-endian ordering for your buffer, do the following:
Should print out: