我有一個簽署int_32值(FFFFFFFC)什麼是代表-4的Java:轉換籤訂Int_32(十六進制)爲Int
如果我嘗試將其轉換...
long x = Long.parseLong("FFFFFFFC", 32);
System.out.println("X: " + x);
。 ..我會得到「X:532021755372」而不是-4。 我怎樣才能將它轉換爲有符號值?
我有一個簽署int_32值(FFFFFFFC)什麼是代表-4的Java:轉換籤訂Int_32(十六進制)爲Int
如果我嘗試將其轉換...
long x = Long.parseLong("FFFFFFFC", 32);
System.out.println("X: " + x);
。 ..我會得到「X:532021755372」而不是-4。 我怎樣才能將它轉換爲有符號值?
你得到不正確的結果,因爲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
試試這個
int x= new BigInteger("FFFFFFFC", 16).intValue();
System.out.println("X: " + x);
如果FFFFFFFC代表-4它爲int,不長,解析它像這樣
int x = Integer.parseUnsignedInt("FFFFFFFC", 16);
並且您將得到-4
這不是「如何解析Java中的十六進制」的重複內容。 OP在他的代碼中犯了一些需要修復的錯誤。此外,解決方案將不同於前面提到的重複中討論的任何解決方案。 – dasblinkenlight