为什么我的Python读取的位数比我设置的多?

时间:2017-01-22 19:35:38

标签: python binary readfile

我正在尝试从二进制文件中读取值,但我遇到了一些麻烦。这就是我正在做的事情:

from struct import unpack

with open("pixelValues.txt", "rb") as f:
    byte = f.read(8)
    foo = unpack("<Q", byte)
    print(foo)

当我运行程序时,输出为(4244912790557L,),这对我来说没有意义,因为它应该是1485102109。有谁看到我做错了什么?

以下是该文件的屏幕截图:

2 个答案:

答案 0 :(得分:2)

你读的太多了。将f.read(8)更改为f.read(4)并将unpack("<Q", byte)更改为unpack("i", byte),这样可以解决您的问题。

答案 1 :(得分:0)

pack('<Q', 1485102109) 

返回:

'\x1d\xdc\x84X\x00\x00\x00\x00'

哪个与您的文件不一致。 你是怎么写的?

编辑:

您已使用%d说明符编写了数字,这意味着您已将其写为4字节整数,而不是无符号长整数,而是作为无符号整数。 你应该这样读:

from struct import unpack

with open("pixelValues.txt", "rb") as f:
    num = f.read(4)
    foo = unpack("<I", num)
    print(foo)