2014-05-08 99 views
0

我有一個字節數組 -十六進制到十進制轉換錯誤

byte[] byteArr = new byte[] { (byte)0x00 , (byte)0xF0 , (byte)0x03 }; 

我剛開始每個人,

Integer byte1 = Integer.valueOf(byteArr[0]); 
Integer byte2 = Integer.valueOf(byteArr[1]); 
Integer byte3 = Integer.valueOf(byteArr[2]); 

String pgnString = byte1.toString() + byte2.toString() + byte3.toString(); 

而且我的輸出是:0-163

但我可以看到正確的輸出應該是:61443

鏈接--- http://www.binaryhexconverter.com/hex-to-decimal-converter

回答

1

那是因爲字節被簽名。 (byte)0xF0實際上與(byte)-16相同。

要轉換爲無符號數,就可以掩蓋的低8位:

int byte1 = byteArr[0] & 0xff; 
int byte2 = byteArr[1] & 0xff; 
int byte3 = byteArr[2] & 0xff; 

String pgnString = String.valueOf(byte1 * 0x10000 + byte2 * 0x100 + byte3); 
+0

好吧,但現在我得到'02403',但不是'61443'來自轉換器。 –

+0

請參閱編輯。你必須考慮到字節有不同的權重。 – Henry

0

如果你不想在同一時間通過他們去一個,你可以使用ByteBuffer轉換到另一個基地。

byte[] byteArr = new byte[] { (byte)0x00 , (byte)0x00 , (byte)0xF0 , (byte)0x03 }; 
int value = ByteBuffer.wrap(byteArr).getInt(); 
// value = 61443 

注:byte[]必須具有長度爲4(或撥打getInt()爲每個4字節的部分)。