我想将整数值转换为十六进制字符串。我快速搜索了stackoverflow并将其作为following way(正如所接受的解决方案所示 - 但是看起来不够仔细):
Integer.valueOf(String.valueOf(n), 16);
但是在尝试转换时
Integer.valueOf(String.valueOf(-2115381772), 16)
它会抛出一个NumberFormatException
。 出于好奇 - 为什么抛出NumberFormatException?
(之后我将代码更改为Integer.toHexString(-2115381772)
,一切都按预期工作。)
答案 0 :(得分:2)
-2115381772
因为十六进制不适合整数。
请尝试Long.valueOf(String.valueOf(-2115381772), 16);
。
答案 1 :(得分:2)
由于,
Integer.valueOf(String.valueOf(-2115381772), 16)
在十六进制(16)基础中考虑-2115381772
值,并且超出int
值的范围。所以你得到了那个例外。
Integer.toHexString(-2115381772)
在十进制基数中考虑-2115381772
值,它在int
值的范围内。
答案 2 :(得分:1)
int
的最小值为-2147483648
。
因此,如果您提供的任何值小于-80000000
,则会抛出NumberFormatException
。
因为Integer.valueOf(String.valueOf(-80000000), 16)
提供-2147483648
作为输出,这是int
的最小值。