簡體   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