从字节序列中读取一个long值,并进行字节序转换

编程语言 2026-07-10

我在用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章