从字节序列中读取一个long值,并进行字节序转换
我在用Java从二进制文件读取一个 Long 变量时遇到了问题。
我的代码:
Static long extractLong (DataInputStream dis) throw IOException{
byte[] bytes = new byte[8];
dis.read(bytes);
ByteBuffer byteBuffer = ByteBuffer.wrap(byte);
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
return byteBuffer.getLong()
}
我知道这个变量应该是20577。
而且我得到的是88377542049792。
这些数字在十六进制表示时会更容易理解。
20577 = 5061
88377542049792 = 506100000000
如果我不改变字节序(endianness),输入将是61500000hex。
通过改变顺序,似乎我只是交换了前两个字节。
我肯定有误,这是我第一个直接处理二进制文件的项目。
解决方案
我怀疑你其实不需要读取 long,而是读取 int:
byte[] bytes = {0, 0, 0x50, 0x61, 0, 0, 0, 0};
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
System.out.println(byteBuffer.getLong()); // 88377542049792
byteBuffer.position(0);
System.out.println(byteBuffer.getInt()); // 20577
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。