为什么我的 Python 读取的位数比我设置的多?
Why does my Python read more bits than I have set?
我正在尝试从二进制文件中读取值,但遇到了一些问题。这就是我正在做的事情:
from struct import unpack
with open("pixelValues.txt", "rb") as f:
byte = f.read(8)
foo = unpack("<Q", byte)
print(foo)
当我 运行 程序时,输出是 (4244912790557L,)
,这对我来说没有意义,因为它应该是 1485102109
。有人看到我做错了什么吗?
这是文件的屏幕截图:
pack('<Q', 1485102109)
Returns:
'\x1d\xdc\x84X\x00\x00\x00\x00'
这与您的文件不一致。
你是怎么写的?
编辑:
您使用 %d 说明符编写了数字,这意味着您将其编写为 4 字节整数,而不是 unsigned long long,而是 unsigned int。
你应该这样阅读:
from struct import unpack
with open("pixelValues.txt", "rb") as f:
num = f.read(4)
foo = unpack("<I", num)
print(foo)
你读得太多了。将 f.read(8)
更改为 f.read(4)
,将 unpack("<Q", byte)
更改为 unpack("i", byte)
,这将解决您的问题。
我正在尝试从二进制文件中读取值,但遇到了一些问题。这就是我正在做的事情:
from struct import unpack
with open("pixelValues.txt", "rb") as f:
byte = f.read(8)
foo = unpack("<Q", byte)
print(foo)
当我 运行 程序时,输出是 (4244912790557L,)
,这对我来说没有意义,因为它应该是 1485102109
。有人看到我做错了什么吗?
这是文件的屏幕截图:
pack('<Q', 1485102109)
Returns:
'\x1d\xdc\x84X\x00\x00\x00\x00'
这与您的文件不一致。 你是怎么写的?
编辑:
您使用 %d 说明符编写了数字,这意味着您将其编写为 4 字节整数,而不是 unsigned long long,而是 unsigned int。 你应该这样阅读:
from struct import unpack
with open("pixelValues.txt", "rb") as f:
num = f.read(4)
foo = unpack("<I", num)
print(foo)
你读得太多了。将 f.read(8)
更改为 f.read(4)
,将 unpack("<Q", byte)
更改为 unpack("i", byte)
,这将解决您的问题。