最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單介紹Python中的struct模塊

 更新時(shí)間:2015年04月28日 17:30:52   作者:廖雪峰  
這篇文章主要介紹了Python中的struct模塊,代碼基于Python2.x版本,需要的朋友可以參考下

準(zhǔn)確地講,Python沒(méi)有專(zhuān)門(mén)處理字節(jié)的數(shù)據(jù)類(lèi)型。但由于str既是字符串,又可以表示字節(jié),所以,字節(jié)數(shù)組=str。而在C語(yǔ)言中,我們可以很方便地用struct、union來(lái)處理字節(jié),以及字節(jié)和int,float的轉(zhuǎn)換。

在Python中,比方說(shuō)要把一個(gè)32位無(wú)符號(hào)整數(shù)變成字節(jié),也就是4個(gè)長(zhǎng)度的str,你得配合位運(yùn)算符這么寫(xiě):

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

非常麻煩。如果換成浮點(diǎn)數(shù)就無(wú)能為力了。

好在Python提供了一個(gè)struct模塊來(lái)解決str和其他二進(jìn)制數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。

struct的pack函數(shù)把任意數(shù)據(jù)類(lèi)型變成字符串:

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

pack的第一個(gè)參數(shù)是處理指令,'>I'的意思是:

>表示字節(jié)順序是big-endian,也就是網(wǎng)絡(luò)序,I表示4字節(jié)無(wú)符號(hào)整數(shù)。

后面的參數(shù)個(gè)數(shù)要和處理指令一致。

unpack把str變成相應(yīng)的數(shù)據(jù)類(lèi)型:

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

根據(jù)>IH的說(shuō)明,后面的str依次變?yōu)镮:4字節(jié)無(wú)符號(hào)整數(shù)和H:2字節(jié)無(wú)符號(hào)整數(shù)。

所以,盡管Python不適合編寫(xiě)底層操作字節(jié)流的代碼,但在對(duì)性能要求不高的地方,利用struct就方便多了。

struct模塊定義的數(shù)據(jù)類(lèi)型可以參考Python官方文檔:

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

Windows的位圖文件(.bmp)是一種非常簡(jiǎn)單的文件格式,我們來(lái)用struct分析一下。

首先找一個(gè)bmp文件,沒(méi)有的話用“畫(huà)圖”畫(huà)一個(gè)。

讀入前30個(gè)字節(jié)來(lái)分析:

>>> 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格式采用小端方式存儲(chǔ)數(shù)據(jù),文件頭的結(jié)構(gòu)按順序如下:

兩個(gè)字節(jié):'BM'表示W(wǎng)indows位圖,'BA'表示OS/2位圖;
一個(gè)4字節(jié)整數(shù):表示位圖大??;
一個(gè)4字節(jié)整數(shù):保留位,始終為0;
一個(gè)4字節(jié)整數(shù):實(shí)際圖像的偏移量;
一個(gè)4字節(jié)整數(shù):Header的字節(jié)數(shù);
一個(gè)4字節(jié)整數(shù):圖像寬度;
一個(gè)4字節(jié)整數(shù):圖像高度;
一個(gè)2字節(jié)整數(shù):始終為1;
一個(gè)2字節(jié)整數(shù):顏色數(shù)。

所以,組合起來(lái)用unpack讀?。?/p>

>>> struct.unpack('<ccIIIIIIHH', s)
('B', 'M', 691256, 0, 54, 40, 640, 360, 1, 24)

結(jié)果顯示,'B'、'M'說(shuō)明是Windows位圖,位圖大小為640x360,顏色數(shù)為24。

請(qǐng)編寫(xiě)一個(gè)bmpinfo.py,可以檢查任意文件是否是位圖文件,如果是,打印出圖片大小和顏色數(shù)。

相關(guān)文章

  • Pycharm-community-2021版安裝和配置

    Pycharm-community-2021版安裝和配置

    pycharm-community-PyCharm是一種Python IDE,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,本文就來(lái)介紹一下Pycharm-community-2021版安裝和配置,感興趣的可以了解一下
    2023-11-11
  • python類(lèi)參數(shù)self使用示例

    python類(lèi)參數(shù)self使用示例

    python中__new__和__init__到底是怎么一回事,使用方法看下面的代碼,大家參考使用吧
    2014-02-02
  • 爬蟲(chóng)訓(xùn)練前端基礎(chǔ)Bootstrap5排版表格圖像

    爬蟲(chóng)訓(xùn)練前端基礎(chǔ)Bootstrap5排版表格圖像

    這篇文章主要為大家介紹了爬蟲(chóng)訓(xùn)練前端基礎(chǔ)Bootstrap5排版表格圖像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • PyQt5使用mimeData實(shí)現(xiàn)拖拽事件教程示例解析下

    PyQt5使用mimeData實(shí)現(xiàn)拖拽事件教程示例解析下

    這篇文章主要為大家介紹了PyQt5使用mimeData實(shí)現(xiàn)拖拽事件的教程示例解析,系列文章詳見(jiàn)文中跳轉(zhuǎn)鏈接,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Selenium+Python自動(dòng)化腳本環(huán)境搭建的全過(guò)程

    Selenium+Python自動(dòng)化腳本環(huán)境搭建的全過(guò)程

    說(shuō)到自動(dòng)化測(cè)試,就不得不提大名鼎鼎的Selenium,Selenium 是如今最常用的自動(dòng)化測(cè)試工具之一,支持快速開(kāi)發(fā)自動(dòng)化測(cè)試框架,且支持在多種瀏覽器上執(zhí)行測(cè)試,下面這篇文章主要給大家介紹了關(guān)于Selenium+Python自動(dòng)化腳本環(huán)境搭建的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • python用列表生成式寫(xiě)嵌套循環(huán)的方法

    python用列表生成式寫(xiě)嵌套循環(huán)的方法

    今天小編就為大家分享一篇python用列表生成式寫(xiě)嵌套循環(huán)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 替換python字典中的key值方法

    替換python字典中的key值方法

    今天小編就為大家分享一篇替換python字典中的key值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python中的Nonetype類(lèi)型怎么判斷

    Python中的Nonetype類(lèi)型怎么判斷

    這篇文章主要介紹了Python中的Nonetype類(lèi)型怎么判斷?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python 實(shí)現(xiàn)靜態(tài)鏈表案例詳解

    Python 實(shí)現(xiàn)靜態(tài)鏈表案例詳解

    這篇文章主要介紹了Python 實(shí)現(xiàn)靜態(tài)鏈表案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Python?在PDF中繪制線條、矩形、橢圓形的方法

    Python?在PDF中繪制線條、矩形、橢圓形的方法

    這篇文章主要介紹了Python在PDF中繪制線條、矩形、橢圓形,本文將通過(guò)以下幾個(gè)示例介紹如何使用Python在PDF中繪制不同的圖形,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

庆元县| 夏河县| 县级市| 长宁区| 随州市| 东兰县| 晋江市| 池州市| 安徽省| 宁蒗| 增城市| 阳谷县| 崇左市| 固镇县| 深水埗区| 仁布县| 华亭县| 吉安县| 赤城县| 孝感市| 内丘县| 鄄城县| 治多县| 莱西市| 喜德县| 石林| 上犹县| 西充县| 前郭尔| 修水县| 阳江市| 始兴县| 新余市| 小金县| 日喀则市| 东光县| 舒兰市| 泉州市| 灵璧县| 安福县| 洞口县|