首页 > 解决方案 > 如何在java中将int转换为hex?

问题描述

public void int2byte(){
    int x = 128;
    byte y = (byte) x;
    System.out.println(Integer.toHexString(y));
}

我得到了结果 ffffff80,为什么不是 80?当 x = 127 时,我得到了结果 7f。

标签: javabyte

解决方案


字节用 Java 签名。当您128转换为 abyte时,它变为-128

: int 12800000000 00000000 00000000 10000000

: byte -12810000000

然后,当你将它扩大回intwith 时Integer.toHexString,因为它现在是负数,它会被符号扩展。这意味着出现了一堆1位,解释了十六进制输出中的额外f字符。

您可以使用无符号方式将其转换Byte.toUnsignedInt为防止符号扩展。

通过无符号转换将参数转换为 an int。在到 an 的无符号转换中int, 的高 24 位int为零,低 8 位等于byte参数的位。

System.out.println(Integer.toHexString(Byte.toUnsignedInt(y)));

另一种方法是通过仅手动保留 8 位来对符号扩展位进行位屏蔽byte

System.out.println(Integer.toHexString(y & 0xFF));

无论哪种方式,输出都是:

80

推荐阅读