[英]ByteBuffer byte padding in Java
我正在研究一個Java程序,其中需要將short
轉換為兩個字節(然后將其打包到數據包中)。 我正在使用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
。 我想念什么嗎?
謝謝!
當ByteBuffer轉換為字節數組時,為什么第二個字節用0xFF填充?
當您使用%H
打印時,它將字節轉換為int。 它不是具有這么多位的ByteBuffer中的字節,而是它的打印方式。 我建議改用Byte.toHexString(a[j])
。
嘗試以下方法:
for (int j = 0; j < a.length; j++)
System.out.printf("a[" + j + "] = 0x%H\n", ((int) a[j]) & 0xFF);
& 0xFF
操作將剪切轉換為int后創建的最高三個字節。
僅供參考: ((int) a[j]) & 0xFF
可以寫為a[j] & 0xFF
並將完全相同地編譯。 但是我最初這樣寫是為了澄清正在發生的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.