Java 十進制和十六制之間的轉化(負數的處理)


在一些情況下,我們需要將數字在十進制和十六制下互相轉化。

在Java中將十進制轉化成十六進制非常的簡單。

int var = 324;
String hex = Integer.toHexString(var);
long lvar = 3243143432134L;
String lhex = Long.toHexString(lvar);
 
這樣就可以得16進制的字符串了。當要從十六進制轉化成十進制的時候也很方便:
Integer.parseInt(hex, 16);
Long.parseLong(hex, 16);
 
當int和long變量的值都是正數的時候,這樣做一點問題都沒問題,但當int和long變量的值為負數的時候,問題就出現了:
int var = -23243;
String hex = Integer.toHexString(var);
Integer.parseInt(hex, 16);
這時會報出Exception:

Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffa535"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:459)
    at demo.Main.main(Main.java:10)

 

這是為什么呢? 問題就在於Integer.parseInteger的時候,會將傳入十六進制數字一致認為成正數,所以這時候表示負數的十六進制字符串所表示的數字就超出了Integer所能表示的數字范圍,所以會報出NumberFormatException, 同時的問題也會現在Long.parseLong身上。

那么如何才解決這個問題呢?這時候的解決方案就是BigInteger.

BigInteger bi = new BigInteger(hex, 16);

通過BigInteger.intValue();和 BigInteger.longValue(); 得到你所需要的int或long型值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM