我正在尝试将以下十六进制字符串转换cc10000000008401
为 Long。Java 意外生成NumberFormatException
.
System.out.println(Long.parseLong("cc10000000008401",16));
我认为,它不应该产生异常,因为上述十六进制字符串的长表示形式是“-3742491290344848383L”,它在 Long 的范围内。
你能帮我知道我为什么会得到NumberFormatException
吗?
我正在尝试将以下十六进制字符串转换cc10000000008401
为 Long。Java 意外生成NumberFormatException
.
System.out.println(Long.parseLong("cc10000000008401",16));
我认为,它不应该产生异常,因为上述十六进制字符串的长表示形式是“-3742491290344848383L”,它在 Long 的范围内。
你能帮我知道我为什么会得到NumberFormatException
吗?
cc10000000008401
是 14,704,252,783,364,703,233,大于Long.MAX_VALUE
9,223,372,036,854,775,807。
由于它溢出long
,您需要使用BigInteger
它来存储它。由于您的文本值以十六进制形式出现,您可以解析它提供正确的基数:
BigInteger i = new BigInteger("cc10000000008401", 16);
System.out.println(i); // 14704252783364703233
在 Java8 中,Long.parseUnsignedLong
( javadoc ) 将处理这个问题。
System.out.println(Long.parseUnsignedLong("cc10000000008401",16));
生产
-3742491290344848383