Python 模塊 Struct

Python 模塊 Struct

Python 的模塊 struct 支持字符串和二進制類型的轉換。

struct 提供了幾個便利的模塊級別的函數,你可以直接調用它們。類似正則表達式,你也可以使用類 Struct 直接編譯一個格式字符串,然後通過使用 Struct 實例對象調用方法,這樣會更有效率。

Packing 和 Unpacking


struct 通過 Packing 把內置的數據結構轉換成字節流。

Python 模塊 Struct

執行:

Python 模塊 Struct

Struct() 通過參數 格式字符串 構造一個 Struct 實例,然後調用 pack() 方法將內置類型轉換為字節流。

注意,格式字符串和 pack() 方法接收的數據是對應的,上例中,I 代表整數類型,佔 4 個字節,4s 包含 4 個字符,f 代表浮點類型,分別對象 pack() 方法傳入的三個參數。

以下表格描述了每個格式字符。

Python 模塊 Struct

使用 unpack() 方法從字節流解析數據,返回 Python 內置類型。

Python 模塊 Struct

執行:

Python 模塊 Struct

上例中,首先使用 binascii 把二進制數據轉換為16進製表示的數據,然後傳入 unpack() 方法,返回內置類型元組。

緩存


Struct 通過字節流在不同的包中傳遞數據非常高效,還可以把字節數據緩存起來優化性能,方法 pack_into() 和 unpack_from() 支持寫入緩存和從中讀取。

Python 模塊 Struct

執行:

Python 模塊 Struct

上例中,通過 Struct 的屬性 size,確定了緩存的大小。

字節順序 Endianness


當數據 pack 成字節流的時候,默認使用系統內置的 c 庫確定字節順序,你也通過字節順序標識顯示的改變默認的行為。

Python 模塊 Struct

執行:

Python 模塊 Struct

上例使用前綴 ! 代表使用網絡順序(Network order)。

下面列出了 Struct 的一些字節順序編碼(byte order code)

  • @ Native Order
  • = Native Standard
  • < Little-Endian
  • >
    Big-Endian
  • ! Network Order


分享到:


相關文章: