Python使用struct處理二進位制

2021-07-05 17:08:26 字數 1540 閱讀 9200

python模組——struct(位元組流,組包拆包實現)

python提供了乙個struct模組來提供轉換。下面就介紹這個模組中的幾個方法。

struct.pack():

struct.pack用於將python的值根據格式符,轉換為字串(因為python中沒有位元組(byte)型別,可以把這裡的字串理解為位元組流,或位元組陣列)。其函式原型為:struct.pack(fmt, v1, v2, …),引數fmt是格式字串,關於格式字串的相關資訊下面有所介紹。v1, v2, …表示要轉換的python值。下面的例子將兩個整數轉換為字串(位元組流):

>>> 

import struct

>>> a=20

>>> b=400

>>> str=struct.pack('ii',a,b) #轉換成位元組流,雖然還是字串,但是可以在網路上傳輸

>>>

print len(str) #ii 表示兩個int

8 #可以看到長度為8個位元組,正好是兩個int型資料的長度

>>> print str

#二進位制是亂碼

>>> print repr(str)

'\x14\x00\x00\x00\x90\x01\x00\x00' #其中十六進製制的 0x00000014, 0x00001009分別表示20和400

>>>

由此我們就可以任意的進行組包了,比如下面乙個打包的例子,只介紹其中的pack

format = "!hh%ds" % len(data)

buffer = struct.pack(format,opcode,blocknumber,data)

我們要對乙個資料進行打包,加上一些個包頭,我們根據下面的格式符資訊,知道h是unsigned short是2個位元組,而s是char型。所以這個buffer就是2個位元組的opcode,2個位元組的blocknumber,和len長的char。

python模組——struct(位元組流,組包拆包實現)

struct.unpack():

我們接著上面的例子執行:

>>> a1,a2=struct.unpack('ii',str)

>>>

print

'a1',a1

a1 20

>>>

print

'a2=',a2

a2= 400

可以看到 「ii」以四個位元組為分界,把8個位元組的str分成了兩個int型的整數。

struct.calcsize():用來計算特定格式的輸出的大小,是幾個位元組,比如:

>>> struct.calcsize('hh4s')

8>>> struct.calcsize('ii')

8>>>

>>> format='!hh%ds' % len('hello python')

>>> struct.calcsize(format)

16>>>

Python中使用struct模組打包二進位制資料

執行環境 python3.4.3 demo.py f open s data.bin wb import struct s b allen data struct.pack i5si 7,s,8 print data f.write data f.close a,b,c struct.unpack ...

struct模組的使用

原理 將一組簡單資料進行打包,轉換為bytes格式傳送。或者將一組bytes格式資料,進行解析。介面使用 struct fmt 功能 生成結構化物件 引數 fmt 定製的資料結構 st.pack v1,v2,v3.功能 將一組資料按照指定格式打包轉換為bytes 引數 要打包的資料 返回值 byte...

Python 使用Pandas進行資料預處理

利用pandas庫中的get dummies函式對類別型特徵進行啞變數處理。get dummies語法 pandas.get dummies data,prefix none,prefix sep dummy na false,columns none,sparse false,drop first...