0

我想将整数值转换为十六进制字符串。我快速搜索了stackoverflow并按照以下方式进行了操作(如接受的解决方案所示 - 但看起来不够仔细):

Integer.valueOf(String.valueOf(n), 16);

但是,当尝试转换

 Integer.valueOf(String.valueOf(-2115381772), 16)

它抛出一个NumberFormatException. 所以出于好奇 - 为什么会抛出 NumberFormatException ?

(之后我将代码更改为Integer.toHexString(-2115381772),一切都按预期工作。)

4

3 回答 3

2

-2115381772因为十六进制不适合整数。

试试Long.valueOf(String.valueOf(-2115381772), 16);吧。

于 2013-10-15T07:34:01.837 回答
2

因为,

Integer.valueOf(String.valueOf(-2115381772), 16)考虑-2115381772以十六进制 (16) 为基数的值,这超出了int值的范围。所以你得到了那个例外。

Integer.toHexString(-2115381772)考虑-2115381772以十进制为基础的值,并且在int值范围内。

于 2013-10-15T07:34:54.780 回答
1

的最小值int-2147483648

因此,当您给出任何小于 的值时-80000000NumberFormatException将被抛出。

因为Integer.valueOf(String.valueOf(-80000000), 16)给出-2147483648作为输出,这是 的最小值int

于 2013-10-15T07:34:50.873 回答