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