2015-07-21 48 views
2

我有一個簽署int_32值(FFFFFFFC)什麼是代表-4的Java:轉換籤訂Int_32(十六進制)爲Int

如果我嘗試將其轉換...

long x = Long.parseLong("FFFFFFFC", 32); 
System.out.println("X: " + x); 

。 ..我會得到「X:532021755372」而不是-4。 我怎樣才能將它轉換爲有符號值?

+0

這不是「如何解析Java中的十六進制」的重複內容。 OP在他的代碼中犯了一些需要修復的錯誤。此外,解決方案將不同於前面提到的重複中討論的任何解決方案。 – dasblinkenlight

回答

5

你得到不正確的結果,因爲32代表numeric base,在結果位的數量不限。您正在將字符串解析爲基數爲32的數字(即在編號系統中使用數字0..9和字母A..V,而不是0..9和A..F。

的數字要解析數正確地,使用Long.parseLong("FFFFFFFC", 16);,並且將結果轉換爲int,這是一個32位的數字:

int x = (int)Long.parseLong("FFFFFFFC", 16); 
System.out.println("X: " + x); // Prints X: -4 

Demo.

0

試試這個

int x= new BigInteger("FFFFFFFC", 16).intValue(); 
System.out.println("X: " + x); 
1

如果FFFFFFFC代表-4它爲int,不長,解析它像這樣

int x = Integer.parseUnsignedInt("FFFFFFFC", 16); 

並且您將得到-4