如何将 long 转换为 4 个字节?我正在接收来自 C 程序的一些输出,它使用无符号长。我需要读取此输出并将其转换为 4 个字节。
但是,java 使用 64 位的有符号长整数。有没有办法进行这种转换?
如何将 long 转换为 4 个字节?我正在接收来自 C 程序的一些输出,它使用无符号长。我需要读取此输出并将其转换为 4 个字节。
但是,java 使用 64 位的有符号长整数。有没有办法进行这种转换?
要将 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 位值的范围。
您可以使用 java.nio.ByteBuffer。它可以解析长字节,并为您进行字节排序。
您可以编写一个循环,将“long”除以 256,取其余部分,然后得到“Least Significant Byte”……(取决于您想要 little-endian 还是 big-endian,您可以向前或向后循环)
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;
}