将字符串转换为整数hex值“奇怪”行为
我注意到java不允许我存储2000000000这样的大数字,即显然是一个整数类型的20亿,但如果我存储相应的hex值,即int largeHex = 0x77359400
; 这可以,
所以我的程序需要增加2 2 ^ 32,刚刚超过42亿,我测试了六角键0xffffffff
它允许我以这种forms存储为int类型,
我的问题是我必须从程序中拉出一个hex字符串。
例
sT = "ffffffff"; int hexSt = Integer.valueOf(sT, 16).intValue();
这仅适用于较小的整数值
我收到一个错误
Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffffff"
我需要做的就是在整数变量中使用此值,例如
int largeHex = 0xffffffff
哪个工作正常?
我使用整数,因为我的程序需要生成许多值
好吧,似乎没有什么可以添加到答案中,但值得澄清一下:
- 它会在解析时抛出exception,因为
ffffffff
对于整数来说太大了。 考虑Integer.parseInt(""+Long.MAX_VALUE);
,不使用hex表示。 这里抛出了同样的exception。 -
int i = 0xffffffff;
将i
设置为-1
。 - 如果你已经决定使用long而不是int,请注意
long l = 0xffffffff;
将l
设置为-1
,因为0xffffffff
被视为int。 正确的forms是long l = 0xffffffffL;
。
String hex = "FFFFFFFF"; // or whatever... maximum 8 hex-digits int i = (int) Long.parseLong(hex, 16);
给你带来签名int的结果……
如何使用:
System.out.println(Long.valueOf("ffffffff", 16).longValue());
System.out.println(Long.valueOf("ffffffff", 16).longValue());
哪个输出:
4294967295
被签名的int
数据类型将存储最多约2 ^ 31的值,只是您需要的值的一半。 但是,您可以使用64位长的long将存储最多约2 ^ 63的值。
希望这将使用hex值来规避整个问题=)
int test = 0xFFFFFF; int test2 = Integer.parseInt(Integer.toHexString(test),16);
^ —按预期工作……但是:
int test = 0xFFFFFFFF; int test2 = Integer.parseInt(Integer.toHexString(test),16);
^ – 抛出数字格式exception。
int test = 0xFFFFFFFF; int test2 =(int)Long.parseLong(Integer.toHexString(test),16);
^ – 工作正常。