Java - 将 Int 转换为字节 - 奇怪的结果

Posted

技术标签:

【中文标题】Java - 将 Int 转换为字节 - 奇怪的结果【英文标题】:Java - Casting Int to Byte - odd results 【发布时间】:2014-07-12 21:34:17 【问题描述】:

我正在对 4 字节大的块执行按位运算。为此,我使用 ByteBuffer 将 4 字节块转换为 4 字节整数。

完成后,我需要将它们转换回字节。使用 ByteBuffer,我正在执行此操作。这是一些带有数据的示例代码,以突出我的困惑:

int a = 1610612739; //simulate casting the 4-byte  block 60 00 00 03
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(a);
byte[] b1 = (b.array());

现在,在这段代码之后,我希望 b1 包含以下内容:

b1[0]: 60
b1[1]: 00
b1[2]: 00
b1[3]: 03

但事实并非如此。相反,我得到了

b2[0]: 96
b2[1]: 0
b2[2]: 0
b2[3]: 3

我的二进制样本整数应该是::

0110 0000 0000 0000 0000 0000 0000 0011 其中最左边的位是符号。

而十进制的96 00 00 032,516,582,403,它超出了Java 的32 位int 范围。

有人知道怎么回事吗?

【问题讨论】:

那是因为96 == 0x60。 (提示:在没有太多人看到的情况下删除问题 :-) +1 认为太复杂了。 ^_^ 经过几年的编程,您会得到一份清单。从忘记复制 dll 并想知道为什么没有任何变化,到多次阅读某些代码并错过大学立即看到的错误,再到常规地用分号结束 if 语句。它发生了。 @Dirgon - 别担心。我们中的大多数人都有面对面的时刻。我也是。 【参考方案1】:

问题在于,您认为它应该以 十六进制 显示,但它却以 十进制 显示。就是这样。

【讨论】:

以上是关于Java - 将 Int 转换为字节 - 奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章

Java bytebuffer 将三个字节转换为 int

将 int 转换为字节 - Java 和 Actionscript 中的不同结果

Java 将 4 个字节转换为 int

JAVA中int强制转换byte

JAVA中int强制转换byte

C语言如何将int类型转换成字符串