Python的內建模組struct學習筆記
阿新 • • 發佈:2018-11-07
python處理二進位制資料時可以使用python的struct模組。
struct模組中最重要的三個函式是pack(), unpack(), calcsize():
pack(fmt, v1, v2, ...) 按照給定的格式(fmt),返回一個包裝後的字串。
unpack(fmt, string) 按照給定的格式(fmt)解析位元組流string,返回一個解析出來的tuple。
calcsize(fmt) 計算給定的格式(fmt)佔用多少位元組的記憶體。
struct中支援的格式如下表:
可以用格式(fmt)中的第一個字元來改變對齊方式。定義如下:
如果沒有附加,預設為@。
例子如下:
>>> import struct
>>> a = struct.pack('ihb',1,2,3)
>>> a
b'\x01\x00\x00\x00\x02\x00\x03'
>>> b = struct.unpack('ihb',a)
>>> b
(1, 2, 3)
首先將引數1,2,3打包。
打包前1,2,3明顯屬於python資料型別中的integer,打包後就成了C結構的二進位制串。
轉成python的string型別來顯示就是'\x01\x00\x00\x00\x02\x00\x03'。由於本機是小端因此高位放在低地址段。
i:代表C結構中的int型別,佔4位,表示為01000000;
h:代表C結構中的short型別,佔2位,表示為0200;
b:代表C結構中的signed char型別,佔1位,表示為03。
再來看一個例子:
>>> a = struct.pack('!ihb',1,2,3) >>> a b'\x00\x00\x00\x01\x00\x02\x03' >>> b = struct.unpack('!ihb',a) >>> b (1, 2, 3)
使用的format string中首位為'!',即為大端模式標準對齊方式。
故而輸出為'\x00\x00\x00\x01\x00\x02\x03',其中高位就被放在記憶體的高地址位了。