python:struct pack大小超过预期 - 为什么会发生这种情况?

时间:2015-11-16 20:54:55

标签: python

所以我想打包一个元组列表,然后再解压缩。

from struct import *
from itertools import chain
a = [(1, 67), (213, 455), (9009, 8887)]
# converts 3x2 list to 6x1 list
b = list(chain(*a))   
size=6
qq = pack('h'+'L'*size,size,*b)
# peak to get the list length
mysize = unpack('h',qq[:2])  
mysize = mysize[0]
unpack('L',qq[2:6])    
unpack('h'+'L'*mysize,qq)
unpack('L'*mysize, qq[2:])   # does not work
unpack('L'*mysize, qq[2:2+mysize*4])  # works

使用Python 2.7,倒数第二行不起作用。当我期待26岁的时候,我测试了len(qq),即28岁。

1 个答案:

答案 0 :(得分:1)

根据docs

C类型以机器的本机格式和字节顺序表示,并在必要时通过跳过填充字节(根据C编译器使用的规则)正确对齐

由于您在64位计算机上运行,​​因此较小的类型(如dataGrid[0].ItemSource = table[0].DefaultView; dataGrid[1].ItemSource = table[1].DefaultView; h)将填充为8个字节。您可以使用格式化标志L来删除填充。例如,添加" ="作品

=, <, >, !