日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python struct pack解析_python struct pack

發(fā)布時間:2025/4/5 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python struct pack解析_python struct pack 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個struct主要是用來處理C結(jié)構(gòu)數(shù)據(jù)的,讀入時先轉(zhuǎn)換為Python的字符串類型,然后再轉(zhuǎn)換為Python的結(jié)構(gòu)化類型,比如元組(tuple)啥的~

一般輸入的渠道來源于文件或者網(wǎng)絡(luò)的二進(jìn)制流。

在轉(zhuǎn)化過程中,主要用到了一個格式化字符串(format strings),用來規(guī)定轉(zhuǎn)化的方法和格式。

下面來談?wù)勚饕姆椒?#xff1a;

struct.pack(fmt,v1,v2,.....)

將v1,v2等參數(shù)的值進(jìn)行一層包裝,包裝的方法由fmt指定。被包裝的參數(shù)必須嚴(yán)格符合fmt。最后返回一個包裝后的字符串。

struct.unpack(fmt,string)

顧 名思義,解包。比如pack打包,然后就可以用unpack解包了。返回一個由解包數(shù)據(jù)(string)得到的一個元組(tuple), 即使僅有一個數(shù)據(jù)也會被解包成元組。其中l(wèi)en(string) 必須等于 calcsize(fmt),這里面涉及到了一個calcsize函數(shù),再后面談到。

struct.calcsize(fmt)

這個就是用來計算fmt格式所描述的結(jié)構(gòu)的大小。

格式字符串(format string)由一個或多個格式字符(format characters)組成,對于這些格式字符的描述參照Python manual如下Formatc TypePythonNotexpad byteno value

ccharstring of length 1

bsignedcharinteger

Bunsignedcharinteger

?_Boolbool(1)

hshortinteger

Hunsignedshortinteger

iintinteger

Iunsignedintinteger or long

llonginteger

Lunsignedlonglong

qlonglonglong(2)

Qunsignedlonglonglong(2)

ffloatfloat

ddoublefloat

schar[]string

pchar[]string

Pvoid*long

說到這里,大家可能都有點(diǎn)迷糊了,那就看一段小代碼

importstruct#native byteorderbuffer=struct.pack("ihb",1,2,3)printrepr(buffer)printstruct.unpack("ihb", buffer)#data from a sequence, network byteorderdata=[1,2,3]

buffer=struct.pack("!ihb",*data)printrepr(buffer)printstruct.unpack("!ihb", buffer)

Output:

'\x01\x00\x00\x00\x02\x00\x03'

(1, 2, 3)

'\x00\x00\x00\x01\x00\x02\x03'

(1, 2, 3)

首 先將參數(shù)1,2,3打包,打包前1,2,3明顯屬于python數(shù)據(jù)類型中的integer,pack后就變成了C結(jié)構(gòu)的二進(jìn)制串,轉(zhuǎn)成 python的string類型來顯示就是  '\x01\x00\x00\x00\x02\x00\x03'。由于本機(jī)是小端('little- endian',關(guān)于大端和小端的區(qū)別請參照這里, 故而高位放在低地址段。i 代表C struct中的int類型,故而本機(jī)占4位,1則表示為01000000;h 代表C struct中的short類型,占2位,故表示為0200;同理b 代表C struct中的signed char類型,占1位,故而表示為03。

其他結(jié)構(gòu)的轉(zhuǎn)換也類似,有些特別的可以參考Manual。

在Format string 的首位,有一個可選字符來決定大端和小端,列表如下:@nativenative

=nativestandard

>big-endianstandard

!network (= big-endian)standard

如果沒有附加,默認(rèn)為@,即使用本機(jī)的字符順序(大端or小端),對于C結(jié)構(gòu)的大小和內(nèi)存中的對齊方式也是與本機(jī)相一致的(native),比如有的機(jī)器integer為2位而有的機(jī)器則為四位;有的機(jī)器內(nèi)存對其位四位對齊,有的則是n位對齊(n未知,我也不知道多少)。

還有一個標(biāo)準(zhǔn)的選項,被描述為:如果使用標(biāo)準(zhǔn)的,則任何類型都無內(nèi)存對齊。

比如剛才的小程序的后半部分,使用的format string中首位為!,即為大端模式標(biāo)準(zhǔn)對齊方式,故而輸出的為'\x00\x00\x00\x01\x00\x02\x03',其中高位自己就被放在內(nèi)存的高地址位了。

關(guān)于struct模塊的講解就到這里。本文只做引子,詳細(xì)內(nèi)容可以參見手冊。由于水平有限,謬誤之處還請指出。

總結(jié)

以上是生活随笔為你收集整理的python struct pack解析_python struct pack的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情亚洲视频 | 中出精品 | 久艹在线播放 | missav | 免费高清av在线看 | 中国字幕一色哟哟 | 美女校花脱精光 | 成人小视频免费 | 国产一区二区三区播放 | 韩日精品在线 | 魔女鞋交玉足榨精调教 | 国产一级做a爰片在线看免费 | 女女h百合无遮羞羞漫画软件 | 95看片淫黄大片一级 | 国产在线欧美在线 | 亚洲欧美一区二区三区 | 九七伦理电影 | 成人精品久久久 | 日韩中文字幕电影 | 亚洲精品色午夜无码专区日韩 | 91成人高清 | 国产a一级 | 欧美一区二区三区成人精品 | 无码熟妇αⅴ人妻又粗又大 | 超碰成人在线观看 | 亚洲激情成人网 | 开心春色激情网 | 秋霞网av| 粗大的内捧猛烈进出在线视频 | 欧美xxxxx视频| 99热都是精品 | 欧美日韩国产色 | 中文字幕在线播放第一页 | 久久精品动漫 | 黄色中文视频 | 免费日韩av| 在线不卡一区 | 天天射天天射天天射 | 久久精品视频在线播放 | 中文字幕精品亚洲 | 天堂国产在线 | 国内特级毛片 | 亚洲国产中文字幕在线观看 | 无码国产精品一区二区高潮 | 欧洲成人午夜精品无码区久久 | 成人一区二区三区仙踪林 | 超碰在线免费看 | 日韩爽爽视频 | 五月婷婷亚洲 | 久久av一区二区三区漫画 | 伊人春色av| a视频在线免费观看 | 草草草av| 中国毛片网 | 浴室里强摁做开腿呻吟男男 | 福利片av | 在线精品视频播放 | 激情小说欧美色图 | xxxxx在线| 欧美在线播放视频 | 韩日av在线 | 性色av一区二区三区红粉影视 | 亚洲国产成人精品无码区99 | 亚洲三页| 特级丰满少妇一级aaa爱毛片 | 国产成人午夜高潮毛片 | 最近2018年手机中文字幕版 | 亚洲 小说区 图片区 | 悠悠色影院 | 午夜色大片 | 欧美不卡在线观看 | 摸丰满大乳奶水www免费 | 日韩亚洲精品视频 | 久久久久久久毛片 | 亚洲一区二区三区免费观看 | av动漫天堂 | 天天夜夜久久 | 国产高清成人久久 | 久久不射电影网 | 欧美不卡| 欧美一级片免费观看 | 亚洲精华国产精华精华液网站 | 国产美女视频一区二区 | 国产尤物av尤物在线看 | 超碰人人网 | 欧美激情五月 | 黄色在线小视频 | 国产哺乳奶水91在线播放 | 荒野求生21天去码版网站 | 国产视频成人 | 国产色片在线观看 | 超碰人人cao | 亚洲成人黄色小说 | 秘密基地在线观看完整版免费 | 在线观看1区 | av超碰在线观看 | www.性欧美 | 真实的国产乱xxxx在线91 | 光明影院手机版在线观看免费 | eeuss国产一区二区三区黑人 |