2013-10-15 16 views
0

我想将整数值转换为十六进制字符串。我快速地搜索计算器,做它的following way(作为接受的解决方案 - 然而这并没有看够细心):试图转换整数到十六进制字符串NumberformatException

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

它抛出一个NumberFormatException

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

不过。 因此出于好奇 - 为什么抛出NumberFormatException?

(后来我改变了代码Integer.toHexString(-2115381772)和一切工作正常。)

回答

2

因为,

Integer.valueOf(String.valueOf(-2115381772), 16)认为在十六进制(16)的基础上,-2115381772值和另一个的范围之外int值。所以你得到了这个例外。

Integer.toHexString(-2115381772)认为-2115381772的值以十进制为基数,它的值在int的范围内。

2

-2115381772为十六进制不适合在一个整数。

尝试用Long.valueOf(String.valueOf(-2115381772), 16);代替。

1

int的最小值是-2147483648

所以当你给任何小于-80000000的值时,会抛出NumberFormatException

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

+0

完全不了解它。 -2115381772 <-2147483648因此是一个完美有效的int。然而,梅拉曼解释它...... – Lonzak

+0

那么你提供的值是''-2115381772''在十六进制,这是''-142089918322''小数,肯定小于“-2147483648”(和btw。''-2115381772> -2147483648'')。 – steffen

相关问题