首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python: struct包大小比预期的要长--为什么会发生这种情况?

python: struct包大小比预期的要长--为什么会发生这种情况?
EN

Stack Overflow用户
提问于 2015-11-16 20:54:55
回答 1查看 234关注 0票数 0

所以我想打包一个元组的列表,然后稍后解压它。

代码语言:javascript
运行
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-16 21:23:52

根据文档的说法:

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

由于您在64位计算机上运行,所以较小的类型(如hL )将被填充到8个字节。您可以使用格式设置标志=, <, >, !来删除填充。例如,添加"=“就可以了

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33744444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档