如何将长整型转换为4字节?我正在从一个C程序接收一些输出,它使用了无符号长整型。我需要读取这个输出并将其转换为4字节。
然而,Java使用的是有符号长整型,即64位。有没有办法进行这种转换?
如何将长整型转换为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位值的范围。
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;
}
int
是带符号的32位,似乎比64位的long
更合适。另外,你是如何将数据从C传递到Java的? - Alvin Wonglong unsigned int
转换为byte[4]
,然后将其传递给Java(可以是逗号分隔的整数列表),似乎更加合适。 - Alvin Wong