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 00111111 1111 0000 0000 0000 0000
----------------------------------------&
1001 1100 0000 0000 0000 0000
然後對得到的數右移》16, 得到10011100。這就相當於從10240099中提取了從左邊開始的8bit數字。
解決bytes
和其他二進位制資料型別的轉換。
>>> importstruct
>>> struct.pack('
>i
', 10240099)b'
\x00\x9c@c
'
函式:struct.
pack
(format, v1, v2, ...
)引數:
struct.
unpack
(format, buffer
)unpack
把bytes
變成相應的資料型別:
>>> 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 ...