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

Python?Struct庫(kù)之pack和unpack舉例詳解

 更新時(shí)間:2024年02月20日 10:48:09   作者:天地神仙  
這篇文章主要給大家介紹了關(guān)于Python?Struct庫(kù)之pack和unpack的相關(guān)資料,pack和unpack在處理二進(jìn)制流中比較常用的封包、解包格式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

1. 官網(wǎng)解析

首先是官網(wǎng)對(duì)于 pack 、 unpack 、calcsize 以及 Format Strings 的描述

1.1 pack、unpack、calcsize

struct.pack 返回一個(gè) bytes對(duì)象,其中包含根據(jù)格式字符串 format 打包的值 v1, v2,…
參數(shù)必須與格式所要求的值完全匹配

struct.unpack 根據(jù)格式字符串 format 從緩沖區(qū) buffer (假設(shè)由pack(format,…)打包)中解包。返回一個(gè)元組,即使它只包含一個(gè)元素。緩沖區(qū)的字節(jié)大小必須與格式所需的大小匹配,如 calcsize() 所反映的那樣。

struct.calcsize 返回與格式字符串 format 對(duì)應(yīng)的結(jié)構(gòu)體(以及由 pack(format,…)生成的 bytes 對(duì)象)的大小。

1.2 Format Strings

這一段在官方的描述中很詳細(xì),同時(shí)也很長(zhǎng),這里我只放幾個(gè)重要的地方,剩下的可以自行去官網(wǎng)查閱

格式字符串描述打包和拆包數(shù)據(jù)時(shí)的數(shù)據(jù)布局。它們由格式字符組成,格式字符指定打包/解包的數(shù)據(jù)類型。此外,特殊字符控制字節(jié)順序、大小和對(duì)齊方式。每個(gè)格式字符串由一個(gè)可選的前綴字符(描述數(shù)據(jù)的總體屬性)和一個(gè)或多個(gè)格式字符(描述實(shí)際數(shù)據(jù)值和填充)組成。

1.2.1 字節(jié)順序、大小和對(duì)齊方式

默認(rèn)情況下,C 語(yǔ)言的類型以機(jī)器的本機(jī)格式和字節(jié)順序表示,并在必要時(shí)通過(guò)填充字節(jié)來(lái)正確對(duì)齊(根據(jù) C 語(yǔ)言編譯器使用的規(guī)則)。選擇這種行為是為了使打包結(jié)構(gòu)體的字節(jié)與相應(yīng)的 C 語(yǔ)言的結(jié)構(gòu)體的內(nèi)存布局完全對(duì)應(yīng)。是使用本機(jī)字節(jié)排序和填充還是標(biāo)準(zhǔn)格式取決于應(yīng)用程序。格式字符串的第一個(gè)字符可以用來(lái)指示字節(jié)順序、大小和打包數(shù)據(jù)的對(duì)齊方式,如下表所示:

1.2.2 格式字符

格式字符有以下含義:給定 C 和 Python 值的類型,它們之間的轉(zhuǎn)換應(yīng)該是顯而易見的。Standard size 列是指使用Standard size時(shí),以字節(jié)為單位的打包值的大小;也就是說(shuō),當(dāng)格式字符串以 <,>,!= 開頭的時(shí)候(詳情見上面一個(gè)表格的 Size 列)。當(dāng)使用 native size 時(shí),打包值的大小取決于平臺(tái)。

2. pack 解析

pack會(huì)把給定的數(shù)據(jù)按照 format string 的方式去打包我們來(lái)看看例子

例子 1

from struct import *
print(pack(">bhl", 1, 2, 3))

這里 format string 為 >bhl,其中 > 代表采用大端(高位字節(jié)在前)的方式打包, b、hl 分別代表采用 signed char、shortlong(對(duì)于 C 語(yǔ)言)的數(shù)據(jù)類型來(lái)分別打包 1、23,他們分別占用 1 字節(jié)、2 字節(jié)和 4 字節(jié),下圖是運(yùn)行的結(jié)果。b 開頭表示是字節(jié)類型,輸出的結(jié)果和我們分析的結(jié)果一致

例子 2

from struct import *
print(pack("<2hl", 1, 2, 3))

這里 format string 為 <2hl,其中 < 代表采用小端(低位字節(jié)在前)的方式打包, 2h 代表前面 2 個(gè)數(shù)據(jù)采用 signed short 類型、進(jìn)一步的,我們可以使用 x+格式字符 來(lái)表示,后續(xù) x 個(gè)字符都用此格式字符來(lái)打包
下圖是運(yùn)行的結(jié)果:b 開頭表示是字節(jié)類型,輸出的結(jié)果和我們分析的結(jié)果一致。

例子 3

注意下面代碼的運(yùn)行結(jié)果

from struct import *
print(pack("@3c", b'1', b'2', b'3'))
print(pack("@1s", b'123'))
print(pack("@2s", b'123'))
print(pack("@3s", b'123'))

這一段代碼主要是 format string 的不同導(dǎo)致了打包的結(jié)果和入?yún)⒉煌?,其?nbsp;c 是以 char 類型去打包,3c 是代表后續(xù)的 3 個(gè)參數(shù)全部按照 char 去打包,而 s 是以 char[] 類型去打包,而 s 前面的數(shù)字則是代表打包多少位

3. unpack 解析

unpack 可以理解為是 pack 的逆向,直接看例子

例子1

from struct import *
print(unpack(">bhl",pack(">bhl", 1, 2, 3)))

將上面第一個(gè)例子的輸出作為unpack的參數(shù)輸入,然后按照和打包一樣的 format string 去進(jìn)行解包我們可以得到如下的結(jié)果,與我們的輸入是一致的。

當(dāng)然,在很多場(chǎng)景下并不是像這樣自己打包數(shù)據(jù)然后再自己解包,而是需要按照一定的協(xié)議去解來(lái)自其他地方的字節(jié)流,于是可以這樣寫,在 data 中換成需要解包的數(shù)據(jù),然后根據(jù)包的協(xié)議(字節(jié)順序、大小和對(duì)齊方式)來(lái)編寫解包的 format string

from struct import *
data = b'\x01\x00\x02\x00\x00\x00\x03'
print(unpack('>bhl', data))

總結(jié) 

到此這篇關(guān)于Python Struct庫(kù)之pack和unpack的文章就介紹到這了,更多相關(guān)Python Struct庫(kù)pack和unpack內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python通過(guò)遞歸函數(shù)輸出嵌套列表元素

    Python通過(guò)遞歸函數(shù)輸出嵌套列表元素

    這篇文章主要介紹了Python通過(guò)遞歸函數(shù)輸出嵌套列表元素,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成

    python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成

    這篇文章主要介紹了python 使用OpenCV進(jìn)行簡(jiǎn)單的人像分割與合成的方法,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2021-02-02
  • python實(shí)現(xiàn)取余操作的簡(jiǎn)單實(shí)例

    python實(shí)現(xiàn)取余操作的簡(jiǎn)單實(shí)例

    在本篇文章里小編給各位分享的是一篇關(guān)于python實(shí)現(xiàn)取余操作的簡(jiǎn)單實(shí)例內(nèi)容,需要的朋友們可以參考下。
    2020-08-08
  • python append、extend與insert的區(qū)別

    python append、extend與insert的區(qū)別

    這篇文章主要介紹了python append、extend與insert的區(qū)別的相關(guān)資料,初學(xué)者對(duì)這幾個(gè)概念經(jīng)常搞混,這里就幫大家理清楚,需要的朋友可以參考下
    2016-10-10
  • Python使用Flask創(chuàng)建 REST API的實(shí)現(xiàn)步驟

    Python使用Flask創(chuàng)建 REST API的實(shí)現(xiàn)步驟

    本文主要介紹了Python使用Flask創(chuàng)建 REST API的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • python與idea的集成的實(shí)現(xiàn)

    python與idea的集成的實(shí)現(xiàn)

    這篇文章主要介紹了 python與idea的集成的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python中的Function定義方法

    Python中的Function定義方法

    Python中,函數(shù)是可被重用的程序段。對(duì)于函數(shù)的定義,可以使用def關(guān)鍵字。
    2009-09-09
  • python繪制雪景圖

    python繪制雪景圖

    這篇文章主要為大家詳細(xì)介紹了python繪制雪景圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • python集合用法實(shí)例分析

    python集合用法實(shí)例分析

    這篇文章主要介紹了python集合用法,較為詳細(xì)的分析了Python中集合的常見用法,需要的朋友可以參考下
    2015-05-05
  • Python模擬鋼琴鍵盤實(shí)現(xiàn)演奏數(shù)鴨子歌曲

    Python模擬鋼琴鍵盤實(shí)現(xiàn)演奏數(shù)鴨子歌曲

    前幾天上課老師給我們講了兩個(gè)模塊,然后利用這兩個(gè)模塊來(lái)模擬鋼琴鍵盤去簡(jiǎn)單地演奏《數(shù)鴨子》今天來(lái)分享給大家,感興趣的可以了解一下
    2022-11-11

最新評(píng)論

永兴县| 邛崃市| 顺平县| 陆川县| 金塔县| 安国市| 称多县| 清远市| 东阳市| 鄂尔多斯市| 宁城县| 秦皇岛市| 托克托县| 同心县| 张家口市| 太康县| 长春市| 谢通门县| 合阳县| 浮山县| 宜春市| 万宁市| 荔浦县| 元谋县| 辛集市| 西乌珠穆沁旗| 赞皇县| 义乌市| 民权县| 闽清县| 安远县| 汉沽区| 岐山县| 侯马市| 嘉峪关市| 金沙县| 涪陵区| 缙云县| 阳泉市| 延川县| 威海市|