簡單介紹Python中的struct模組

來源:互聯網
上載者:User
準確地講,Python沒有專門處理位元組的資料類型。但由於str既是字串,又可以表示位元組,所以,位元組數組=str。而在C語言中,我們可以很方便地用struct、union來處理位元組,以及位元組和int,float的轉換。

在Python中,比方說要把一個32位不帶正負號的整數變成位元組,也就是4個長度的str,你得配合位元運算符這麼寫:

>>> n = 10240099>>> b1 = chr((n & 0xff000000) >> 24)>>> b2 = chr((n & 0xff0000) >> 16)>>> b3 = chr((n & 0xff00) >> 8)>>> b4 = chr(n & 0xff)>>> s = b1 + b2 + b3 + b4>>> s'\x00\x9c@c'

非常麻煩。如果換成浮點數就無能為力了。

好在Python提供了一個struct模組來解決str和其他位元據類型的轉換。

struct的pack函數把任意資料類型變成字串:

>>> import struct>>> struct.pack('>I', 10240099)'\x00\x9c@c'

pack的第一個參數是處理指示,'>I'的意思是:

>表示位元組順序是big-endian,也就是網路序,I表示4位元組不帶正負號的整數。

後面的參數個數要和處理指示一致。

unpack把str變成相應的資料類型:

>>> struct.unpack('>IH', '\xf0\xf0\xf0\xf0\x80\x80')(4042322160, 32896)

根據>IH的說明,後面的str依次變為I:4位元組不帶正負號的整數和H:2位元組不帶正負號的整數。

所以,儘管Python不適合編寫底層操作位元組流的代碼,但在對效能要求不高的地方,利用struct就方便多了。

struct模組定義的資料類型可以參考Python官方文檔:

https://docs.python.org/2/library/struct.html#format-characters

Windows的位元影像檔案(.bmp)是一種非常簡單的檔案格式,我們來用struct分析一下。

首先找一個bmp檔案,沒有的話用“畫圖”畫一個。

讀入前30個位元組來分析:

>>> s = '\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00'

BMP格式採用小端方式儲存資料,檔案頭的結構按順序如下:

兩個位元組:'BM'表示Windows位元影像,'BA'表示OS/2位元影像;
一個4位元組整數:表示位元影像大小;
一個4位元組整數:保留位,始終為0;
一個4位元組整數:實際映像的位移量;
一個4位元組整數:Header的位元組數;
一個4位元組整數:映像寬度;
一個4位元組整數:映像高度;
一個2位元組整數:始終為1;
一個2位元組整數:顏色數。

所以,組合起來用unpack讀取:

>>> struct.unpack('

結果顯示,'B'、'M'說明是Windows位元影像,位元影像大小為640x360,顏色數為24。

請編寫一個bmpinfo.py,可以檢查任意檔案是否是位元影像檔案,如果是,列印出圖片大小和顏色數。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.