二進位制處理庫主要是針對二進位制資料的操作和使用,也有介紹一些特定的操作,比如像檔案格式和網路協議。
在前面也介紹了文字處理庫,其實有一部分功能也是能處理二進位制資料的,比如正規表示式re,或者是difflib比較庫對資料進行處理。此外,在python內部也提供了bytes/bytearray/memoryview等資料型別進行操作。
本模組主要對python的數值與c結構表示為python的bytes物件之間進行轉換。通過此模組可以處理以二進位制儲存在檔案裡的資料,也可以處理網路連線之間相互傳送的資料,或者其它**的二進位制資料。此模擬主要通過格式化字串方式來描述c結構的儲存格式,然後根據這個格式來讀取或儲存python內部表示的資料型別。
在模組struct裡,很多函式都需要使用乙個緩衝區引數,因而此緩衝區引數應實現buffer協議,並且提供讀或者讀寫的功能。大多數情況下使用bytes和bytearray都可以滿足要求,不過其它型別也有實現buffer協議,基本上都是可以檢視的功能。
本模組定義下面異常和函式功能:
exception struct.error
定義struct操作出錯異常原因,struct.error是返回乙個字串描述出錯原因。
例子:#python 3.4.3
import struct
b = 0
try:
print('測試')
struct.pack('a', b)
except struct.error as error:
print('異常出錯提示:', error)
結果輸出如下:
測試異常出錯提示: bad char in struct format
struct.pack(fmt, v1, v2, ...)
把引數v1、v2按格式fmt格式化填充到緩衝區,返回乙個bytes物件。引數的個數和型別要與格式化字串一致。
例子:#python 3.4.3
import struct
print(struct.pack('hhl', 1, 2, 3))
結果輸出如下:
b''struct.pack_into(fmt, buffer, offset, v1, v2, ...)
把引數v1,v2按格式fmt打包,並寫入緩衝區物件buffer的開始位置offset處。注意位置引數offset一定要提供。
例子:#python 3.4.3
import struct
buf = bytearray(10)
print(struct.pack_into('hhl', buf, 0, 1, 2, 3))
print(buf)
結果輸出如下:
none
bytearray(b'')
struct.unpack(fmt, buffer)
從乙個緩衝區bytes物件buffer按格式化字串進行解包,把解包出來的相應字段生成乙個元組返回。緩衝區的大小應滿足len(bytes)等於calcsize(fmt)大小。否則會丟擲異常錯誤。
例子:#python 3.4.3
import struct
buf = struct.pack('hhl', 1, 2, 3)
print(buf)
print(struct.unpack('hhl', buf))
結果輸出如下:
b''(1, 2, 3)
struct.unpack_from(fmt, buffer, offset=0)
從緩衝區buffer的指定位置offset,按格式fmt進行解包,把結果放到元組裡。要求buffer[offset:]的大小至少大於calcsize(fmt)的大小。
例子:#python 3.4.3
import struct
buf = bytearray(10)
struct.pack_into('hhl', buf, 0, 1, 2, 3)
print(buf)
tmp = struct.unpack_from('hhl', buf, 0)
print(tmp)
結果輸出如下:
bytearray(b'')
(1, 2, 3)
struct.iter_unpack(fmt, buffer)
迭代地按格式fmt來解包緩衝區buffer,要求buffer的長度剛好是格式fmt的整數倍大小,否則丟擲異常。與unpack()多次呼叫比較主要是提高解包的速度。
例子:#python 3.4.3
import struct
buf = bytearray(20)
struct.pack_into('hhl', buf, 0, 1, 2, 3)
struct.pack_into('hhl', buf, 8, 4, 5, 6)
print(buf)
btbuf = bytes(buf[0:16])
for tmp in struct.iter_unpack('hhl', btbuf):
print(tmp)
結果輸出如下:
bytearray(b'')
(1, 2, 3)
(4, 5, 6)
struct.calcsize(fmt)
計算給出格式字串fmt來計算需要緩衝區的大小。
例子:#python 3.4.3
import struct
print('hhl:', struct.calcsize('hhl'))
print('hhh:', struct.calcsize('hhh'))
結果輸出如下:
hhl: 8
hhh: 6
Python中二進位制資料處理模組struct使用
python中沒有二進位制型別,但是可以使用string字串型別來儲存二進位制資料,然後使用struct模組來對二進位制資料進行處理。下面將詳細描述如何使用struct模組來處理二進位制資料。使用struct.pack把乙個整數值打包成字串,開啟python命令列,輸入 import struct ...
python處理二進位制資料
處理二進位制資料離不開python的struct模組,struct理解上你可以把它理解為c語言的結構體,使用該模組的pack和unpack方法,可以很容易的把二進位制資料轉換為常用的型別資料,如整型 字元型等 結構體如下 struct header 將二進位制資料流解析為常用的資料型別,例如 pyt...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...