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