我想使用十六进制值动态设置一个整数变量,但是当我使用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上。
解决方案
Long.parseLong我试图使用or转换负整数值Integer.parseInt,但正确的解决方案是使用Integer.parseUnsignedInt("FD8914EC");
在我的测试中,该值FD8914EC转换为-41347860(声明为long a = 0xFD8914EC)或4253619436(声明为long b = Long.parseLong("FD8914EC", 16);),但您必须始终使用Integer.parseUnsignedInt(如果十六进制值以 开头,结果将为负F)。