为什么此十六进制值得到不同的十进制值?

shi*_*tai 6 java

我想使用十六进制值动态设置一个整数变量,但是当我使用Integer.parse(hexValue, 16)它时,它得到的值不同于设置为int a = 0x04A7D488

例如:

int a = 0x04A7D3B8;
System.out.println("a = " + a); // prints 78107576

int b = Integer.parseInt("04A7D3B8", 16); 
System.out.println("b = " + b); // prints 78107784
Run Code Online (Sandbox Code Playgroud)

为什么我得到不同的值?如何动态设置变量a与值0x04A7D3B8

注意:我发现此错误仅发生在Java SDK 1.8.0_171上。

shi*_*tai 3

解决方案

Long.parseLong我试图使用or转换负整数值Integer.parseInt,但正确的解决方案是使用Integer.parseUnsignedInt("FD8914EC");

在我的测试中,该值FD8914EC转换为-41347860(声明为long a = 0xFD8914EC)或4253619436(声明为long b = Long.parseLong("FD8914EC", 16);),但您必须始终使用Integer.parseUnsignedInt(如果十六进制值以 开头,结果将为负F)。