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。
因为:
The int data type is a 32-bit signed two's complement integer. It has
a minimum value of -2,147,483,648 and a maximum value of 2,147,483,647
代码抛出 NumberFormatException:
String largeNumberAsAString = "9999999999";
Integer.toHexString(Integer.parseInt(largeNumberAsAString)); // NumberFormatException
由于 NumberFormatException
,我如何使用 String
参数而不是 int
参数获得与 Integer.toHexString()
相同的功能?
使用BigInteger
来避免原始int
和long
的数值限制:
BigInteger x = new BigInteger("9999999999999999999999"); // Default radix is 10
String x16 = x.toString(16); // Radix 16 indicates hex
System.out.println(x16);
class 方便地公开了一个采用 String
的构造函数,它被解释为数字的十进制表示形式。
试试这个方法:
String largeNumberAsAString = "9999999999";
System.out.println(Integer.toHexString(BigDecimal.valueOf(Double.valueOf(largeNumberAsAString)).intValue()));
当数字大于2^31但小于2^32时,即在负整数范围内,
你可以这样做:
int n = Integer.parseUnsignedInt("CAFEBABE", 16);
(我这里用的是十六进制,这样更容易看出上面我们正好在那个范围内。)
但是 9_999_999_999 也超出了 unsigned int 范围。
如果您的输入值可以任意大,那么 涉及 BigInteger
是您最好的选择。
但是,如果您的值小于 263,那么您可以只使用 Long
而不是 Integer
:
String dec = "9999999999";
String hex = Long.toHexString(Long.parseLong(dec));
System.out.println(hex); // 2540be3ff
我有这行 Java 代码,如果表示为 String
的数字大于 2,147,483,647,它将抛出 NumberFormatException。
因为:
The int data type is a 32-bit signed two's complement integer. It has a minimum value of -2,147,483,648 and a maximum value of 2,147,483,647
代码抛出 NumberFormatException:
String largeNumberAsAString = "9999999999";
Integer.toHexString(Integer.parseInt(largeNumberAsAString)); // NumberFormatException
由于 NumberFormatException
,我如何使用 String
参数而不是 int
参数获得与 Integer.toHexString()
相同的功能?
使用BigInteger
来避免原始int
和long
的数值限制:
BigInteger x = new BigInteger("9999999999999999999999"); // Default radix is 10
String x16 = x.toString(16); // Radix 16 indicates hex
System.out.println(x16);
class 方便地公开了一个采用 String
的构造函数,它被解释为数字的十进制表示形式。
试试这个方法:
String largeNumberAsAString = "9999999999";
System.out.println(Integer.toHexString(BigDecimal.valueOf(Double.valueOf(largeNumberAsAString)).intValue()));
当数字大于2^31但小于2^32时,即在负整数范围内, 你可以这样做:
int n = Integer.parseUnsignedInt("CAFEBABE", 16);
(我这里用的是十六进制,这样更容易看出上面我们正好在那个范围内。)
但是 9_999_999_999 也超出了 unsigned int 范围。
如果您的输入值可以任意大,那么 BigInteger
是您最好的选择。
但是,如果您的值小于 263,那么您可以只使用 Long
而不是 Integer
:
String dec = "9999999999";
String hex = Long.toHexString(Long.parseLong(dec));
System.out.println(hex); // 2540be3ff