[英]Python Struct for Binary Data
我正在尝试读取包含float和int16值流的二进制文件。 这些值交替存储。
[float] [int16] [float] [int16] ...依此类推
现在,我想使用struct函数通过python程序读取此数据文件。
为了读取一个类似的float-int16-pair的块,我假设格式字符串为“ fh”。 以下输出有意义,总大小为6个字节
In [73]: struct.calcsize('fh')
Out[73]: 6
现在,我想一次读取较大的块以加快程序的速度...
In [74]: struct.calcsize('fhfh')
Out[74]: 14
为什么不返回12?
引用文档:
注意默认情况下,打包给定C结构的结果包括pad字节,以维护所涉及的C类型的正确对齐。 同样,拆箱时也要考虑对齐方式。 选择此行为是为了使打包结构的字节与对应的C结构的内存中的布局完全对应。 要处理与平台无关的数据格式或忽略隐式填充字节,请使用标准大小和对齐方式,而不是本机大小和对齐方式:有关详细信息,请参见字节顺序,大小和对齐方式。
如果您希望calcsize('fhfh')
正好是calcsize('fh')
两倍,则需要指定对齐字符。
尝试使用'<fhfh'
或'>fhfh'
。
您必须指定字节顺序或字节序,因为大小和对齐是基于该顺序的,因此,如果尝试以下操作:
>>> struct.calcsize('fhfh')
>>> 14
>>> struct.calcsize('>fhfh')
>>> 12
原因是因为在struct
未指定字节序默认为native
有关更多详细信息,请参见此处: https : //docs.python.org/3.0/library/struct.html#struct.calcsize
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.