Python struct pack, unpack

Python struct 模組能夠執行 Python 值和 C 結構之間的轉換,這些結構表示為 Python 字串。

Python Struct

  • Python struct 模組可用於處理存儲在文件、數據庫或來自網絡連接等地方的二進制數據。
  • 它使用格式字符串作為 C 結構佈局和對/從 Python 值的預期轉換的緊湊描述。

Python Struct 函數

struct 模組中有五個重要的函數 – pack(), unpack(), calcsize(), pack_into()unpack_from()。在所有這些函數中,我們都必須提供要轉換為二進制的數據的格式。一些流行的格式字符包括:

?: boolean
h: short
l: long
i: int
f: float
q: long long int

您可以在 這裡 獲得完整的格式字符列表。讓我們逐個查看 struct 模組函數。

Python struct.pack()

此函數將一組值打包到指定類型的字符串表示中。參數必須與格式所需的值完全匹配。讓我們快速查看struct pack()的示例:

import struct

var = struct.pack('hhl', 5, 10, 15)
print(var)
 
var = struct.pack('iii', 10, 20, 30)
print(var)

當運行此腳本時,我們獲得以下表示:請注意,輸出中的「b」代表二進制。

Python struct.unpack()

此函數將打包的值解包為其指定格式的原始表示。此函數始終返回一個元組,即使只有一個元素。讓我們快速查看struct unpack()函數示例:

import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))

當運行此腳本時,我們獲得原始表示:顯然,我們必須告訴Python解釋器我們需要將值解包為哪種格式。

Python struct calcsize()

此函數計算並返回具有給定格式的結構的字符串表示形式的大小。大小以字節為單位計算。讓我們快速查看一個示例代碼片段:

import struct
 
var = struct.pack('hhl', 5, 10, 15)
print(var)
print("Size of String representation is {}.".format(struct.calcsize('hhl')))

當我們運行此腳本時,我們得到以下表示:

Python struct pack_into(), unpack_from()

這些函數允許我們將值打包到字符串緩衝區並從字符串緩衝區解包。這些函數是在版本2.5中引入的。

import struct
# 導入ctypes以創建字符串緩衝區
import ctypes

# 如前面的示例所示
size = struct.calcsize('hhl')
print(size)

# 從ctypes創建緩衝區 'buff'
buff = ctypes.create_string_buffer(siz)

# struct.pack_into()將數據打包到buff中,並且它不返回任何值
# struct.unpack_from()從buff中解包數據,返回一個值元組
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))

當我們運行這個腳本時,我們會得到以下的表示:這就是有關Python struct模塊的簡短介紹。

Source:
https://www.digitalocean.com/community/tutorials/python-struct-pack-unpack