簡體   English   中英

Java中的ByteBuffer字節填充

[英]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.

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