繁体   English   中英

二进制数据的Python结构

[英]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结构的内存中的布局完全对应。 要处理与平台无关的数据格式或忽略隐式填充字节,请使用标准大小和对齐方式,而不是本机大小和对齐方式:有关详细信息请参见字节顺序,大小和对齐方式。

https://docs.python.org/2/library/struct.html

如果您希望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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM