struct.pack()/unpack()

在Python手冊中,給出了C語言中經常使用類型與Python類型對應的格式符:python

格式符 C語言類型 Python類型 注 x pad byte no value c char string of length 1 b signed char integer B unsigned char integer ? _Bool bool h short integer H unsigned short integer i int integer I unsigned int integer or long l long integer L unsigned long long q long long long Q unsigned long long long f float float d double float s char[] string p char[] string P void * long數組

struct.pack   struct.pack用於將Python的值根據格式符,轉換爲字符串(由於Python中沒有字節(Byte)類型,能夠把這裏的字符串理解爲字節流,或字節數組)。其函數原型爲:struct.pack(fmt, v1, v2, ...),參數fmt是格式字符串,關於格式字符串的相關信息在下面有所介紹。v1, v2, ...表示要轉換的python值。下面的例子將兩個整數轉換爲字符串(字節流):網絡

[python] view plaincopy import struct函數

a = 20
b = 400字符串

str = struct.pack("ii", a, b) #轉換後的str雖然是字符串類型,但至關於其餘語言中的字節流(字節數組),能夠在網絡上傳輸
print 'length:', len(str)
print str
print repr(str)原型

#---- result
#length: 8string

----這裏是亂碼

#'/x14/x00/x00/x00/x90/x01/x00/x00'import

格式符"i"表示轉換爲int,'ii'表示有兩個int變量。進行轉換後的結果長度爲8個字節(int類型佔用4個字節,兩個int爲8個字節),能夠看到輸出的結果是亂碼,由於結果是二進制數據,因此顯示爲亂碼。能夠使用python的內置函數repr來獲取可識別的字符串,其中十六進制的0x00000014, 0x00001009分別表示20和400。變量

struct.unpack   struct.unpack作的工做恰好與struct.pack相反,用於將字節流轉換成python數據類型。它的函數原型爲:struct.unpack(fmt, string),該函數返回一個元組。 下面是一個簡單的例子:亂碼

[python] view plaincopy str = struct.pack("ii", 20, 400)
a1, a2 = struct.unpack("ii", str)
print 'a1:', a1
print 'a2:', a2

#---- result: #a1: 20 #a2: 400

本站公眾號
   歡迎關注本站公眾號,獲取更多信息