2013-03-22 87 views
7

我需要做的就是將一個無符號的兩字節數組轉換爲一個整數。我知道,我知道,Java沒有未簽名的數據類型,但我的數字是假裝無符號字節。Java無符號字節[2]爲int?

byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000 
int i = (byte)b[0] << 8 | (byte)b[1]; 

問題是不正確轉換,因爲它認爲這些都是有符號字節...我如何將其轉換回一個int?

+0

轉換爲int,然後進行移位。 – Apurv 2013-03-22 00:21:16

+0

這不是真的重複。鏈接的問題是大約2個字節int到無符號字節。你可以推斷你也必須掩蓋第一個答案的第一個字節,但這根本不明顯。我不明白他們如何將這個答案標記爲重複。在接受之前檢查嗎?我們可以報告嗎? – BaptisteL 2017-07-18 09:17:51

回答

17

Java中沒有無符號數字,字節或整數或其他。當字節在被移位之前被轉換爲int時,它們被符號擴展,即0x88 =>0xFFFFFF88。你需要掩蓋你不需要的東西。

試試這個

int i = ((b[0] << 8) & 0x0000ff00) | (b[1] & 0x000000ff); 

,你會得到35000

2

您可以使用

int i = ((b[0] & 0xFF) << 8) | (b[1] & 0xFF); 

int i = ByteBuffer.wrap(b).getChar(); 

int i = ByteBuffer.wrap(b).getShort() & 0xFFFF;