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

时间:2019-04-08 21:19:45

标签: java

我想使用十六进制值动态设置一个整数变量,但是当我使用export class Dialog { public static DefaultOptionsKey = 'dialog-default-options'; public static DefaultOptionsInjectionToken = new InjectionToken<ScrollStrategyProducer>(Dialog.DefaultOptionsKey); } export class SdkConstants { public static Dialog: typeof Dialog = Dialog; } 时,它得到的值与设置为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 设置为值a

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

1 个答案:

答案 0 :(得分:3)

解决方案

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

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

相关问题