如何将long转换为4个字节?我从C程序接收一些输出,它使用unsigned long。我需要读取此输出并将其转换为4个字节。
但是,java使用64位的有符号长整数。有没有办法进行这种转换?
答案 0 :(得分:9)
要读取4个字节作为无符号32位值,假设它是小端,最简单的方法是使用ByteBuffer
byte[] bytes = { 1,2,3,4 };
long l = ByteBuffer.wrap(bytes)
.order(ByteOrder.LITTLE_ENDIAN).getInt() & 0xFFFFFFFFL;
虽然l
可以是带符号的64位值,但它只会在0到2 ^^ 32-1之间,这是无符号32位值的范围。
答案 1 :(得分:1)
你可以编写一个循环,你将“long”除以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;
}
答案 2 :(得分:1)
您可以使用java.nio.ByteBuffer。它可以解析long,它会为你执行字节排序。