http://www.cnblogs.com/coser/archive/2011/12/17/2291160.html
最近在學習python網絡編程這一塊,在寫簡單的socket通信代碼時,遇到了struct這個模塊的使用,當時不太清楚這到底有和作用,后來查閱了相關資料大概了解了,在這里做一下簡單的總結。
了解c語言的人,一定會知道struct結構體在c語言中的作用,它定義了一種結構,里面包含不同類型的數據(int,char,bool等等),方便對某一結構對象進行處理。而在網絡通信當中,大多傳遞的數據是以二進制流(binary data)存在的。當傳遞字符串時,不必擔心太多的問題,而當傳遞諸如int、char之類的基本數據的時候,就需要有一種機制將某些特定的結構體類型打包成二進制流的字符串然后再網絡傳輸,而接收端也應該可以通過某種機制進行解包還原出原始的結構體數據。python中的struct模塊就提供了這樣的機制,該模塊的主要作用就是對python基本類型值與用python字符串格式表示的C struct類型間的轉化(This module performs conversions between Python values and C structs represented as Python strings.)。stuct模塊提供了很簡單的幾個函數,下面寫幾個例子。
1、基本的pack和unpack
struct提供用format specifier方式對數據進行打包和解包(Packing and Unpacking)。例如:
import struct import binascii values = (1, 2.7) packed_data = struct.pack('if',*values) unpacked_data = struct.unpack('if',packed_data) print('Original values:', values) print('Packed Value :', binascii.hexlify(packed_data)) print('Unpacked Type :', type(unpacked_data), ' Value:', unpacked_data) ''' Original values: (1, 2.7) Packed Value : b'01000000cdcc2c40' Unpacked Type : <class 'tuple'> Value: (1, 2.700000047683716) '''