簡體   English   中英

Java:將字節轉換為整數

[英]Java: Convert byte to integer

我需要在java中將2字節數組(byte [2])轉換為整數值。 我怎樣才能做到這一點?

您可以使用ByteBuffer

ByteBuffer buffer = ByteBuffer.wrap(myArray);
buffer.order(ByteOrder.LITTLE_ENDIAN);  // if you want little-endian
int result = buffer.getShort();

另請參見將4個字節轉換為int

在Java中,Bytes是有符號的,這意味着一個字節的值可能是負數,當發生這種情況時,@ MattBall的原始解決方案將無效。

例如,如果bytes數組的二進制形式如下:

1000 1101 1000 1101

那么myArray [0]是1000 1101而myArray [1]是1000 1101 ,字節1000 1101的十進制值是-115而不是141(= 2 ^ 7 + 2 ^ 3 + 2 ^ 2 + 2 ^ 0)

如果我們使用

int result = (myArray[0] << 8) + myArray[1]

值為-16191 ,這是錯誤的。

其錯誤的原因在於,當我們將2字節數組解釋為整數時,所有字節都是無符號的,因此在轉換時,我們應該將帶符號的字節映射到無符號整數:

((myArray[0] & 0xff) << 8) + (myArray[1] & 0xff)

結果是36237 ,使用計算器或ByteBuffer檢查它是否正確(我已經完成了,是的,它是正確的)。

另外,如果您可以使用Guava庫:

Ints.fromByteArray(0, 0, myArray[1], myArray[0]);

值得一提的是,因為很多項目無論如何都會使用它。

只需這樣做:

return new BigInteger(byte[] yourByteArray).intValue();

在藍牙命令轉換等方面效果很好。無需擔心已簽名和無符號轉換。

好吧,每個字節都是-128..127范圍內的整數,所以你需要一種方法將一對整數映射到一個整數。 有很多方法可以做到這一點,具體取決於您在字節對中編碼的內容。 最常見的是將16位有符號整數存儲為一對字節。 將其轉換回整數取決於您是否將其存儲為big-endian形式:

(byte_array[0]<<8) + (byte_array[1] & 0xff)

或小端:

(byte_array[1]<<8) + (byte_array[0] & 0xff)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM