2014-10-20 53 views
0

HI我想從十六進制字符串中得到精確的整數值。將十六進制字符串轉換爲整數

我的問題是我有一個整數值作爲-25其十六進制字符串爲「E7」

但是當我轉換-25使用

public static String toHexString(int i) { 

    String hexString = Integer.toHexString(i); 
    if (hexString.length() % 2 != 0) { 
     hexString = "0" + hexString; 
    } 

    return hexString.toUpperCase(); 
} 

上面的函數,它返回「FFFFE7」

,當我轉換用它來獲得十進制值是231

int len =Integer.parseInt(Hex,16); 

我得到錯誤「無效的內部」

,但是當我把它轉換到手動整數值

int len =Integer.parseInt("E7",16); 

我得到的結果爲231

所以任何人都告訴我,我怎樣才能得到確切整數通過傳遞整個十六進制字符串?

因爲我的十六進制字符串是動態的,所以我無法修復它。

+0

-25十六進制只有FFFFE7 ...所以你的程序是correct.check它的http: //www.binaryhexconverter.com/decimal-to-hex-converter – Roshan 2014-10-20 05:17:24

回答

0
public static void main(String[] args) { 
     String hex = Integer.toHexString(-25); 
     System.out.println("hex is :: " + hex); 
     int n = (int) Long.parseLong(hex, 16); 
     System.out.println("int is :: " + n); 
    } 

輸出

hex is :: ffffffe7 
int is :: -25 
+0

感謝您的回覆,但我已經做到了。但我不想-25再次我想要整數值231這是十六進制字符串E7 ... – 2014-10-20 05:37:36

+0

@NehaShukla quetsion不清楚。參考我的輸出,然後告訴我們。 – 2014-10-20 05:41:42

+0

我的意思是E7的十進制值是231,所以我希望它返回231 ... – 2014-10-20 05:43:22

0

由於數是負的,它會溢出。 Integer.parseInt()需要signed int,而toHexString()產生unsigned結果。

您應該使用Long.parseLong(hex, 16);

如:

String hex = Integer.toHexString(-25); 
System.out.println(hex); 
try { 
    int len =Integer.parseInt(hex,16); 
    System.out.println(len); 
}catch (NumberFormatException e){ 
    System.out.println("Number format exception"); 
} 
int val = (int) Long.parseLong(hex, 16); 
System.out.println(val); 

輸出地說:

ffffffe7 
Number format exception 
-25 
+0

感謝您的回覆,但我已經做到了。但我不想-25再次我想要整數值231這是十六進制字符串E7 ... – 2014-10-20 05:37:55

相關問題