私は、ashort
を2バイトに変換する必要がある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
、2 番目のバイトが 0xFF でパディングされるのはなぜですか? 0x87
配列の 2 番目の要素は の代わりにする必要があるようです0xFFFFFF87
。何か不足していますか?
ありがとう!