我想从二进制文件中解压结构,我知道前4个字节是一个整数(值为64),接下来的3 * 8字节是三个双精度值。我已经存储的数据在一个名为fileContent这样的载体:Python结构解压缩整数后加双精度
with open('data', mode='rb') as file:
fileContent = file.read()
然后我尝试:
print(struct.unpack("i", fileContent[0:4]))
这正确打印数量64。然而,我想也可以参考下面的双所以我修改声明上面
print(struct.unpack("id", fileContent[0:12]))
(因为整数应该是4个字节,并且双应该是8位,产生总共12个字节)。不过,我得到一个错误,指出
struct.error: unpack requires a bytes object of length 16
另外,如果我尝试读取双只及用途:
print(struct.unpack("d", fileContent[4:12])
我没有得到双重的正确值!将上面的切片更改为[8:16]会给出正确的值。有人可以解释这个吗?我确信文件中的前4个字节应该是一个整数,接下来的8个字节应该是一个整数。 read()以某种方式填充整数为零,或发生了什么?
您的输入结构可能被填充,因此'double'对齐8个字节。 –
我在终端中做了一个二进制转储,并且输入文件'data'没有被填充(考虑到在小端机器上,前四个字节是01000000 00000000 00000000 00000000)并且后面的字节非零,并且I认为他们代表了浮动。 read()函数是否会自动填充数据? – JezuzStardust