long を 4 バイトに変換するにはどうすればよいですか? C プログラムからの出力を受け取り、unsigned long を使用しています。この出力を読み取り、これを 4 バイトに変換する必要があります。
ただし、Java は 64 ビットの signed long を使用します。この変換を行う方法はありますか?
long を 4 バイトに変換するにはどうすればよいですか? C プログラムからの出力を受け取り、unsigned long を使用しています。この出力を読み取り、これを 4 バイトに変換する必要があります。
ただし、Java は 64 ビットの signed long を使用します。この変換を行う方法はありますか?
符号なし 32 ビット値として 4 バイトを読み取るには、それがリトルエンディアンであると仮定すると、ByteBuffer を使用するのが最も簡単です。
byte[] bytes = { 1,2,3,4 };
long l = ByteBuffer.wrap(bytes)
.order(ByteOrder.LITTLE_ENDIAN).getInt() & 0xFFFFFFFFL;
符号付き 64 ビット値にl
することができますが、符号なし 32 ビット値の範囲である 0 から 2^32-1 の間になります。
「ロング」を256で割り、残りを取り、「最下位バイト」を取得するループをコーディングできます...(リトルエンディアンとビッグエンディアンのどちらが必要かによって、前方または後方にループできます)
long l = (3* 256 * 256 * 256 + 1 * 256 *256 + 4 * 256 + 8);
private byte[] convertLongToByteArray(long l) {
byte[] b = new byte[4];
if(java.nio.ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN){
for (int i=0; i<4; i++) {
b[i] = (byte)(l % 256) ;
l = l / 256;
}
}else{
for (int i=3; i>=0; i--) {
b[i] = (byte)(l % 256) ;
l = l / 256;
}
}
return b;
}
java.nio.ByteBuffer を使用できます。long を解析でき、バイトの順序付けを行います。