Python struct模块

1 struct模块 pack

struct.pack 用于将Python的值根据格式符号,转为字符串,注意返回的结果是一个字符串,因为Python中没有字节(Byte)类型,可以将这里的字符串理解为字节流或者字节数组。
其函数原型为:struct.pack(fmt, v1, v2, …),参数fmt是格式字符串,关于格式字符串的相关信息在有所介绍。v1, v2, …表示要转换的python值。下面的例子将两个整数转换为字符串(字节流):

import struct
packData= struct.pack("H5sbbH",1,"otcyb",2,3,7 )
print repr(packData)  #'\x01\x00otcyb\x02\x03\x00\x07\x00'
unPackData=struct.unpack("H",packData)  #出错
print unPackData

在上面将 数据{1,"otcyb",2,3,7} 组装成一个字节流字符串类型,存储在packData中。

2 unpack

struct.unpack
struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。它的函数原型为:struct.unpack(fmt, string),该函数返回一个元组。 需要注意的是 unpack传入的参数有两个,一个是格式字符串,第二个参数是一个字符串类型的数据,表示要被解包的数据,这个数据的长度要和格式字符中指定的数据的长度一致,否则解包不成功,在上面的例子中
unPackData=struct.unpack("H",packData) #出错 的原因就是因为被解包数据和格式字符串数据不同

packData= struct.pack("H5sbbH",1,"otcyb",2,3,7 )
print repr(packData)
unPackData=struct.unpack("H5sbbH",packData)
print unPackData

输出结果:
'\x01\x00otcyb\x02\x03\x00\x07\x00'
(1, 'otcyb', 2, 3, 7)

需要说明的是 输出的结果是一个元组的形式。 

你可能感兴趣的:(Python struct模块)