Python模組struct 二進位制資料服務

2022-08-17 23:03:14 字數 1496 閱讀 2172

python沒有專門處理位元組的資料型別。但由於b'str'可以表示位元組,所以,位元組陣列=二進位制str。

而在c語言中,我們可以很方便地用struct、union來處理位元組,以及位元組和int,float的轉換。

在python中,比方說要把乙個32位無符號整數變成位元組,也就是4個長度的bytes,你得配合位運算子這麼寫:

>>> n = 10240099

>>> b1 = (n & 0xff000000) >> 24

>>> b2 = (n & 0xff0000) >> 16

>>> b3 = (n & 0xff00) >> 8

>>> b4 = n & 0xff

>>> bs =bytes([b1, b2, b3, b4])

>>>bsb'

\x00\x9c@c

'

解釋:10240099是十進位制數字,轉化為2進製數字有24位(3個位元組)。想把它用位元組串表示,可以使用bytes()方法,但是bytes()指接收1個位元組以內的十進位制數字,即0~255。所以要把10240099分解為3部分,每部分乙個位元組,然後用bytes()求每個位元組的位元組串,最後再組裝起來。很麻煩,具體見上面的**。

說明:

b2 = (n & 0xff0000) >> 16   #位運算符號&,和右移運算子》的作用:提取10240099的右邊的8位字元。

10240099 & 0xff0000 ,位與,只有都是有1,才得1

1001 1100 0100 0000 0110 0011

1111 1111 0000 0000 0000 0000

----------------------------------------&

1001 1100 0000 0000 0000 0000

然後對得到的數右移》16, 得到10011100。這就相當於從10240099中提取了從左邊開始的8bit數字。

解決bytes和其他二進位制資料型別的轉換。

>>> import

struct

>>> struct.pack('

>i

', 10240099)b'

\x00\x9c@c

'

函式:struct.pack(format, v1, v2, ...

)引數:

struct.unpack(format, buffer

)unpackbytes變成相應的資料型別:

>>> struct.unpack('

>ih

', b'

\xf0\xf0\xf0\xf0\x80\x80')

(4042322160, 32896)

本文參考:

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 ...

python內建模組之struct

1.python提供了乙個struct模組來解決bytes和其他二進位制資料型別的轉換。struct的pack函式把任意資料型別變成bytes import struct print struct.pack i 10240099 執行結果 c program files python36 pytho...

Python標準庫 struct模組

將位元組打包為二進位制資料。struct模組負責python bytes物件在python value及c struct之間的轉換。可以處理檔案二進位制資料 網路連線資料流或是其他源資料。它使用 format strings作為c結構布局的簡潔描述以及與python值的預期轉換。第乙個format ...