2

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

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

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

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

4

2 回答 2

4

cc10000000008401是 14,704,252,783,364,703,233,大于Long.MAX_VALUE9,223,372,036,854,775,807。

由于它溢出long,您需要使用BigInteger它来存储它。由于您的文本值以十六进制形式出现,您可以解析它提供正确的基数:

BigInteger i = new BigInteger("cc10000000008401", 16);
System.out.println(i); // 14704252783364703233
于 2018-08-02T12:53:29.153 回答
3

在 Java8 中,Long.parseUnsignedLong( javadoc ) 将处理这个问题。

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

生产

-3742491290344848383

于 2018-08-02T12:57:48.003 回答