![](/img/trans.png)
[英]Convert int to Hex String without using 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
避免原始int
和long
數值限制:
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
現場演示 。
當數字大於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.