久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python中struct.pack()和struct.unpack()用法詳細(xì)說(shuō)明

 myallmy 2021-09-18
python 中的struct主要是用來(lái)處理C結(jié)構(gòu)數(shù)據(jù)的,,讀入時(shí)先轉(zhuǎn)換為Python的 字符串 類型,然后再轉(zhuǎn)換為Python的結(jié)構(gòu)化類型,,比如元組(tuple)啥的~,。一般輸入的渠道來(lái)源于文件或者網(wǎng)絡(luò)的二進(jìn)制流。

1.struct.pack()和struct.unpack()

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

下面來(lái)談?wù)勚饕姆椒ǎ?/p>

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

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

1.2 struct.unpack(fmt,string)

  顧名思義,,解包。比如pack打包,,然后就可以用unpack解包了,。返回一個(gè)由解包數(shù)據(jù)(string)得到的一個(gè)元組(tuple), 即使僅有一個(gè)數(shù)據(jù)也會(huì)被解包成元組,。其中l(wèi)en(string) 必須等于 calcsize(fmt),這里面涉及到了一個(gè)calcsize函數(shù),。struct.calcsize(fmt):這個(gè)就是用來(lái)計(jì)算fmt格式所描述的結(jié)構(gòu)的大小,。

  格式字符串(format string)由一個(gè)或多個(gè)格式字符(format characters)組成,對(duì)于這些格式字符的描述參照Python manual如下:

Python中struct.pack()和struct.unpack()用法詳細(xì)說(shuō)明

2.代碼示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import  struct
# native byteorder
buffer  =  struct.pack( "ihb" 1 2 3 )
print  repr ( buffer )
print  struct.unpack( "ihb" buffer )
# data from a sequence, network byteorder
data  =  [ 1 2 3 ]
buffer  =  struct.pack( "!ihb" * data)
print  repr ( buffer )
print  struct.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類型來(lái)顯示就是  '\x01\x00\x00\x00\x02\x00\x03'。由于本機(jī)是小端('little- endian',關(guān)于大端和小端的區(qū)別請(qǐng)參照這里, 故而高位放在低地址段,。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 的首位,,有一個(gè)可選字符來(lái)決定大端和小端,列表如下:

Python中struct.pack()和struct.unpack()用法詳細(xì)說(shuō)明

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

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

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

以上就是Python中struct.pack()和struct.unpack()用法詳細(xì)說(shuō)明的詳細(xì)內(nèi)容,,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多