所以我想打包一个元组的列表,然后稍后解压它。
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
使用Python2.7,第二行到最后一行不能工作。当我期望26岁的时候,我测试了28岁的len(qq)
。
发布于 2015-11-16 21:23:52
根据文档的说法:
C类型以机器的本机格式和字节顺序表示,并在必要时通过跳过字节对齐(根据C编译器使用的规则)。
由于您在64位计算机上运行,所以较小的类型(如h
和L
)将被填充到8个字节。您可以使用格式设置标志=, <, >, !
来删除填充。例如,添加"=“就可以了
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
https://stackoverflow.com/questions/33744444
复制相似问题