我正在研究一個Java程序,我需要將short
轉換爲兩個字節(然後將其打包到數據包中)。我使用ByteBuffer
來執行轉換,它似乎工作,但我看到一些明顯的字節填充,我不太明白。Java中的ByteBuffer字節填充
下面是一個簡單的例子,我寫道:
import java.lang.*;
import java.io.*;
import java.nio.ByteOrder;
import java.nio.ByteBuffer;
public class Test {
public static void main(String args[]) {
short i = 27015;
String s = Integer.toHexString(i);
System.out.println("i = " + i);
System.out.println("s = " + s);
System.out.println("---");
ByteBuffer b = ByteBuffer.allocate(2);
b.order(ByteOrder.BIG_ENDIAN);
b.putShort(i);
System.out.printf("0x%H\n", b.getShort(0));
System.out.println("---");
byte[] a = b.array();
for(int j = 0; j < a.length; j++)
System.out.printf("a[" + j + "] = 0x%H\n", a[j]);
System.exit(0);
}
}
此程序產生以下輸出:
i = 27015
s = 6987
---
0x6987
---
a[0] = 0x69
a[1] = 0xFFFFFF87
當ByteBuffer
轉換爲byte
陣列,爲什麼爲0xFF填充第二字節?看起來陣列的第二個元素應該是0x87
而不是0xFFFFFF87
。我錯過了什麼嗎?
謝謝!
字節'0x87'是負數,它的高位被設置。轉換爲int另一個得到0xFFFFFF87,一個負數。 –