python中的struct主要是用來處理C結構資料的,讀入時先轉換為Python的字串類型,然後再轉換為Python的結構化類型,例如元組(tuple)啥的~。一般輸入的管道來自檔案或網路的二進位流。
1.struct.pack()和struct.unpack()
在轉換過程中,主要用到了一個格式化字串(format strings),用來規定轉換的方法和格式。
下面來談談主要的方法:
1.1 struct.pack(fmt,v1,v2,.....)
將v1,v2等參數的值進行一層包裝,包裝的方法由fmt指定。被包裝的參數必須嚴格符合fmt。最後傳回一個包裝後的字串。
1.2 struct.unpack(fmt,string)
顧名思義,解包。例如pack打包,然後就可以用unpack解包了。傳回一個由解包資料(string)得到的一個元組(tuple), 即使只有一個資料也會被解包成元組。其中len(string) 必須等於 calcsize(fmt),這裡面涉及到了一個calcsize函數。 struct.calcsize(fmt):這就是用來計算fmt格式所描述的結構的大小。
格式字串(format string)由一個或多個格式字元(format characters)組成,對於這些格式字元的描述參考Python manual如下:
##2.程式碼範例
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)
先將參數1,2,3打包,打包前1,2,3明顯屬於python資料型別中的integer ,pack後就變成了C結構的二進位串,轉成python的string型別來顯示就是'\x01\x00\x00\x00\x02\x00\x03'。由於本機是小端('little- endian',關於大端和小端的區別請參照這裡, 故而高位放在低地址段。i 代表C struct中的int類型,故而本機佔4位,1則表示為01000000;h 代表C struct中的short類型,佔2位,故表示為0200;同理b 代表C struct中的signed char類型,佔1位,故而表示為03。
其他結構的轉換也類似,有些特別的可以參考官方文件的Manual。 ,列表如下:
如果沒有附加,預設為@,即使用本機的字元順序(大端or小端),對於C結構的大小和記憶體中的對齊方式也是與本機相一致的(native),例如有的機器integer為2位而有的機器則為四位;有的機器內存對其位四位對齊,有的則是n位對齊( n未知,我也不知道多少)。
例如剛才的小程式的後半部分,使用的format string中首位為! ,即為大端模式標準對齊方式,故而輸出的為'\x00\x00\x00\x01\x00\x02\x03',其中高位自己就被放在內存的高地址位了。
以上是Python中struct.pack()和struct.unpack()用法詳細說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。