繁体   English   中英

Java:由于NumberFormat异常,需要使用String参数而不是Int参数获得与Integer.toHexString()相同的功能

[英]Java : Need to get the same functionality of the Integer.toHexString() with a String parameter and not an Int parameter due to NumberFormat Exception

我有这行Java代码,如果以String表示的数字大于2,147,483,647,则将引发NumberFormatException。

因为:

int数据类型是32位带符号的二进制补码整数。 最小值为-2,147,483,648,最大值为2,147,483,647

代码引发NumberFormatException:

String largeNumberAsAString = "9999999999";
Integer.toHexString(Integer.parseInt(largeNumberAsAString)); // NumberFormatException

由于NumberFormatException我如何通过String参数而不是int参数获得Integer.toHexString()的相同功能?

使用BigInteger避免原始intlong数值限制:

BigInteger x = new BigInteger("9999999999999999999999"); // Default radix is 10
String x16 = x.toString(16);                             // Radix 16 indicates hex
System.out.println(x16);

该类方便地公开采用String的构造函数,该构造函数被解释为数字的十进制表示形式。

演示。

如果您的输入值可以任意大,那么@dasblinkenlight涉及BigInteger 的答案就是最好的选择。

但是,如果您的值小于2 63 ,则可以使用Long代替Integer

String dec = "9999999999";
String hex = Long.toHexString(Long.parseLong(dec));
System.out.println(hex);                             // 2540be3ff

现场演示

使用Integer.parseUnsignedInt

当数字大于2 ^ 31但小于2 ^ 32,因此在负int范围内时,可以执行以下操作:

int n = Integer.parseUnsignedInt("CAFEBABE", 16);

(我在这里使用了十六进制,因为更容易看到上面的数值在该范围内。)

但是9_999_999_999也在unsigned int范围之上。

尝试这种方式:

 String largeNumberAsAString = "9999999999";
    System.out.println(Integer.toHexString(BigDecimal.valueOf(Double.valueOf(largeNumberAsAString)).intValue())); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM