簡體   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