成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

Python3 struct模塊的基本用法

大家好!今天我給大家介紹一下“struct模塊的基本用法”。通過struct模塊可以將數(shù)據(jù)包裝成C語言類型的二進(jìn)制字節(jié)流。通過這種字節(jié)流,可以非常方便地與其他語言開發(fā)的模塊和程序進(jìn)行二進(jìn)制格式的數(shù)據(jù)交

大家好!今天我給大家介紹一下“struct模塊的基本用法”。通過struct模塊可以將數(shù)據(jù)包裝成C語言類型的二進(jìn)制字節(jié)流。通過這種字節(jié)流,可以非常方便地與其他語言開發(fā)的模塊和程序進(jìn)行二進(jìn)制格式的數(shù)據(jù)交互。彌補了Python內(nèi)建I/O函數(shù)只能操作字符串的不足。如果您覺得這篇教程有幫助,請為我投上寶貴的一票,謝謝!如果您對我寫的系列教程感興趣,請“關(guān)注”我吧!

啟動IDLE程序

1. 必須安裝Python 3后,啟動IDLE程序。點擊界面菜單中的“File > New File”,新建一個空白的Python源代碼文件,然后保存為“study_struct_”文件。

struct模塊的打包和解包

2. 在Python 3中的struct模塊提供了一系列的打包和解包函數(shù)以及一個名為Struct的類。這兩種方式在功能上并沒有區(qū)別,你可以根據(jù)代碼環(huán)境自由選擇。通過函數(shù),可以將數(shù)據(jù)按照指定的格式(請參考Python 3幫助手冊,搜索“struct”)打包到字節(jié)流中。而通過struct.unpack函數(shù),則可以將字節(jié)流中的數(shù)據(jù)按指定的格式還原為Python數(shù)據(jù)。

體驗打包和解包

3. 清楚了struct模塊的打包和解包用法后,接下來,可以通過代碼體驗一下它們的具體用法。在“study_struct_”源代碼文件中,導(dǎo)入struct模塊,然后在try…except塊中添加打包Python數(shù)據(jù)的代碼并輸出打包后的數(shù)據(jù)。代碼編寫完畢后,點擊F5運行程序。一切正常時,可以在Shell窗口中見到輸出的結(jié)果。

4. 繼續(xù)向源代碼的try…except塊中添加解包字節(jié)流并輸出解包數(shù)據(jù)的代碼,然后點擊F5運行。一切正常時,可以在Shell窗口中見到解包后的數(shù)據(jù)與最初傳入的數(shù)據(jù)相同,除了那個0.1535,這個實際是浮點數(shù)的誤差,屬于正?,F(xiàn)象。

使用Struct類

5. Python的struct模塊中同時提供了Struct類,通過該類的pack和unpack方法,同樣可以打包和解包二進(jìn)制數(shù)據(jù)。調(diào)用時,需要注意傳入的參數(shù)類型,別跟同名的函數(shù)弄混了,它可以Struct對象。

6. 向源代碼的try…except塊中追加通過Struct類對象打包和解包數(shù)據(jù)的代碼,然后按F5運行。核對Shell窗口中打印的數(shù)據(jù),可以確定其結(jié)果與struct函數(shù)輸出的一致。

pack_into和unpack_from函數(shù)

7. struct模塊中提供了_into和struct.unpack_from函數(shù),用于將數(shù)據(jù)打包到緩沖區(qū)(比如:array對象),以及從緩沖區(qū)中解包數(shù)據(jù)。使用pack_into函數(shù)時,需要提供一個可寫的緩沖區(qū),可以通過array模塊中提供的array函數(shù)創(chuàng)建,在創(chuàng)建array對象時,可以傳入一個推導(dǎo)列表用于設(shè)置array的長度。

8. 繼續(xù)向源代碼文件的try…except塊中添加“打包數(shù)據(jù)到緩沖區(qū)”的測試代碼。代碼編寫完之后,點擊F5運行。在Shell窗口中,可以見到打包數(shù)據(jù)的輸出結(jié)果,直接用print輸出array時,它會以array的存儲格式輸出數(shù)據(jù)。將其轉(zhuǎn)換為二進(jìn)制后,輸出的結(jié)果就與之前的一致了。

9. 繼續(xù)向源代碼文件的try…except塊中添加“從緩沖區(qū)解包數(shù)據(jù)”的測試代碼,然后按F5運行。在Shell窗口中,可以見到與之前輸出一致的解碼數(shù)據(jù)。

iter_unpack函數(shù)

模塊還提供了一個以固定格式遍歷解包字節(jié)流的函數(shù)iter_unpack。主要用在循環(huán)中,以固定格式解碼字節(jié)流中的所有數(shù)據(jù)。

11. 繼續(xù)向源代碼文件的try…except塊中追加“以字符格式遍歷解包字節(jié)流”的代碼,然后按F5運行。代碼運行結(jié)束后,可以在Shell窗口中見到打印的所有字節(jié)數(shù)據(jù)。由于_unpack返回的是一個iterator,所以輸出的數(shù)據(jù)格式都是iterator的格式。

總結(jié)

至此,Python中struct模塊的基本用法就介紹完畢了,下一篇文章中,我會向大家介紹一下在Python中通過二進(jìn)制文件與C代碼進(jìn)行交互的方法。敬請期待!Enjoy!~

標(biāo)簽: