NumberFormatException,同时将十六进制字符串转换为Long

时间:2018-08-02 12:51:07

标签: java exception validatelongrange

我正在尝试将以下十六进制字符串cc10000000008401转换为Long。 Java意外生成NumberFormatException

  

System.out.println(Long.parseLong(“ cc10000000008401”,16));

我认为,它不应该产生异常,因为上述十六进制字符串的长表示为“ -3742491290344848383L”,该值完全在Long范围内。

您能帮我知道我为什么得到NumberFormatException吗?

2 个答案:

答案 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.parseUnsignedLongjavadoc)将对此进行处理。

System.out.println(Long.parseUnsignedLong("cc10000000008401",16));

产生

-3742491290344848383