日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python模塊學(xué)習(xí)----struct數(shù)據(jù)格式轉(zhuǎn)換

 sofes 2011-01-11

  Python是一門非常簡潔的語言,對于數(shù)據(jù)類型的表示,不像其他語言預(yù)定義了許多類型(如:在C#中,光整型就定義了8種),它只 定義了六種基本類型:字符串,整數(shù),浮點數(shù),元組,列表,字典。通過這六種數(shù)據(jù)類型,我們可以完成大部分工作。但當(dāng)Python需要通過網(wǎng)絡(luò)與其他的平臺 進(jìn)行交互的時候,必須考慮到將這些數(shù)據(jù)類型與其他平臺或語言之間的類型進(jìn)行互相轉(zhuǎn)換問題。打個比方:C++寫的客戶端發(fā)送一個int型(4字節(jié))變量的數(shù) 據(jù)到Python寫的服務(wù)器,Python接收到表示這個整數(shù)的4個字節(jié)數(shù)據(jù),怎么解析成Python認(rèn)識的整數(shù)呢? Python的標(biāo)準(zhǔn)模塊struct就用來解決這個問題。

  struct模塊的內(nèi)容不多,也不是太難,下面對其中最常用的方法進(jìn)行介紹:

 struct.pack

  struct.pack用于將Python的值根據(jù)格式符,轉(zhuǎn)換為字符串(因為Python中沒有字節(jié)(Byte)類型,可以把這里的字符串理解為字節(jié)流,或字節(jié)數(shù)組)。其函數(shù)原型為:struct.pack(fmt, v1, v2, ...),參數(shù)fmt是格式字符串,關(guān)于格式字符串的相關(guān)信息在下面有所介紹。v1, v2, ...表示要轉(zhuǎn)換的python值。下面的例子將兩個整數(shù)轉(zhuǎn)換為字符串(字節(jié)流):

格式符"i"表示轉(zhuǎn)換為int,'ii'表示有兩個int變量。進(jìn)行轉(zhuǎn)換后的結(jié)果長度為8個字節(jié)(int類型占用4個字節(jié),兩個int為8個字 節(jié)),可以看到輸出的結(jié)果是亂碼,因為結(jié)果是二進(jìn)制數(shù)據(jù),所以顯示為亂碼。可以使用python的內(nèi)置函數(shù)repr來獲取可識別的字符串,其中十六進(jìn)制的 0x00000014, 0x00001009分別表示20和400。

struct.unpack

  struct.unpack做的工作剛好與struct.pack相反,用于將字節(jié)流轉(zhuǎn)換成python數(shù)據(jù)類型。它的函數(shù)原型為:struct.unpack(fmt, string),該函數(shù)返回一個 元組 。 下面是一個簡單的例子:

struct.calcsize

  struct.calcsize用于計算格式字符串所對應(yīng)的結(jié)果的長度,如:struct.calcsize('ii'),返回8。因為兩個int類型所占用的長度是8個字節(jié)。

struct.pack_into, struct.unpack_from

   這兩個函數(shù)在Python手冊中有所介紹,但沒有給出如何使用的例子。其實它們在實際應(yīng)用中用的并不多。Google了很久,才找到一個例子,貼出來共享一下:

  在Python手冊中,給出了C語言中常用類型與Python類型對應(yīng)的格式符:

格式符 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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多