在python中解包int + long long

时间:2016-11-30 10:27:49

标签: python

在尝试读取和解压缩python 2.7.9中的int32 + int64时,我必须遵循一些奇怪的问题

file = open('my_file.bin','rb')
s = file.read(4 + 8)
struct.unpack('IQ',s)

我收到以下错误: unpack需要一个长度为16的字符串参数

为什么? I = 4 Q = 8 IQ = 12

btw以下作品:

s = file.read(4)
struct.unpack('I',s)
s = file.read(8)
struct.unpack('Q',s)

2 个答案:

答案 0 :(得分:2)

Haven自己使用它,但根据文档,unpack()使用结构的本机填充,就像你机器上的C编译器一样:显然,你是在64位机器上运行。如果您知道要打包的结构并遵循本机字节排序,请使用等号IQ作为格式字符串=IQ的前缀。

背景:CPU可以比打包数据更有效地获取在字边界上对齐的数据,这需要两个取指周期(并且DRAM访问与CPU速度相比较慢)。现在64位是常见的(8字节字),这有助于解释为什么我们现在需要更多的内存......

答案 1 :(得分:0)

这是与对齐相关的问题。您可以查看docs