我正在使用struct模块,事情并没有像我预期的那样.由于我对模块的一些误解,我肯定.
import struct
s = struct.Struct('Q');
print s.size
s = struct.Struct('H L Q');
print s.size
s = struct.Struct('H I Q');
print s.size
s = struct.Struct('H I Q H');
print s.size
Run Code Online (Sandbox Code Playgroud)
这个输出是:
8
24
16
18
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?为什么第二和第三种不同尺寸,为什么第四种不是16?
对齐问题.
假设您在64位非Windows平台上运行:Q和L长度为8字节,I为4字节,H为2字节.
并且这些类型必须放在其大小的倍数上以获得最佳效率.
因此,第二结构将被安排为:
HH______ LLLLLLLL QQQQQQQQ
Run Code Online (Sandbox Code Playgroud)
第三个结构:
HH__IIII QQQQQQQQ
Run Code Online (Sandbox Code Playgroud)
和第四个结构:
HH__IIII QQQQQQQQ HH
Run Code Online (Sandbox Code Playgroud)
如果您不想对齐,并且要求L到有4个字节(以下简称"标准"的大小),你需要使用=或>或<格式,如在http://docs.python.org/library/struct .html#struct-alignment:
import struct
s = struct.Struct('=Q')
print s.size
s = struct.Struct('=HLQ')
print s.size
s = struct.Struct('=HIQ')
print s.size
s = struct.Struct('=HIQH')
print s.size
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |