国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python struct模塊解析

2019-11-25 18:22:36
字體:
來源:轉載
供稿:網友

python提供了一個struct模塊來提供轉換。下面就介紹這個模塊中的幾個方法。

    struct.pack():

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

復制代碼 代碼如下:

>>> import struct
>>> a=20
>>> b=400
>>> str=struct.pack('ii',a,b)    #轉換成字節流,雖然還是字符串,但是可以在網絡上傳輸
>>> print len(str)               #ii 表示兩個int
8                                #可以看到長度為8個字節,正好是兩個int型數據的長度
>>> print str
                               #二進制是亂碼
>>> print repr(str)
'/x14/x00/x00/x00/x90/x01/x00/x00'   #其中十六進制的 0x00000014, 0x00001009分別表示20和400
>>>

   由此我們就可以任意的進行組包了,比如下面一個打包的例子,只介紹其中的pack

復制代碼 代碼如下:

format = "!HH%ds" % len(data)
buffer = struct.pack(format,opcode,blocknumber,data)

 我們要對一個數據進行打包,加上一些個包頭,我們根據下面的格式符信息,知道H是unsigned short是2個字節,而s是char型。所以這個buffer就是2個字節的opcode,2個字節的blocknumber,和len長的char。

struct.unpack():

   我們接著上面的例子運行:

復制代碼 代碼如下:

>>> a1,a2=struct.unpack('ii',str)
>>> print 'a1',a1
a1 20
>>> print 'a2=',a2
a2= 400

可以看到 “ii”以四個字節為分界,把8個字節的str分成了兩個int型的整數。

 struct.calcsize():用來計算特定格式的輸出的大小,是幾個字節,比如:

復制代碼 代碼如下:

>>> struct.calcsize('HH4s')
8
>>> struct.calcsize('ii')
8
>>>

>>> format='!HH%ds' % len('hello python')
>>> struct.calcsize(format)
16
>>>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝阳县| 衡南县| 宣化县| 清原| 措美县| 东乡族自治县| 民权县| 清涧县| 交城县| 沙田区| 尚义县| 普格县| 乐安县| 封丘县| 长宁区| 罗平县| 桑植县| 土默特左旗| 海林市| 碌曲县| 奉贤区| 上饶市| 临朐县| 若尔盖县| 吴堡县| 望谟县| 米林县| 和政县| 天柱县| 固始县| 永嘉县| 图木舒克市| 桦甸市| 东乡| 盐津县| 霸州市| 原平市| 扶余县| 建宁县| 林州市| 樟树市|