python进行二进制数据处理的方法
方法一:使用struct模块,特点轻量化,简单易用。缺点就是可读性不是太好,使用小数据临时使用一下,对于大量的数据解析,写起来比较繁琐,显得有点力不从心。
import struct
data = b'\x92\xaa\xbb\xcc\x11\x22\x33\x44'
a,b,c,d,e = struct.unpack(">BBBBI", data)
print("a=0x%x b=0x%x c=0x%x d=0x%x e=0x%x"%(a,b,c,d,e))
packData = struct.pack(">BBBBI", a, b, c, d, e)
print("packData: %s"%packData)上面的程序会按照给定的格式一次解析数据,得到的输出结果如下:
注:建议采用python3运行,python2不区分bytes和string类型,通过struct.pack()得到的结果为字符串类型,会打印出乱码。
a=0x92 b=0xaa c=0xbb d=0xcc e=0x11223344
packData: b'\x92\xaa\xbb\xcc\x11"3D'可以看出,能够正确的解析和组装出需要的的数据。
struct常用函数原型如下:
struct的方法说明pack(fmt, v1, v2…)按照fmt指定的格式化要求,格式化v1,v2等后续参数,返回bytes类型unpack(fmt, BytesData)按照fmt指定的格式要求,解析出bytesData里面的数据内容,返回的是数据元组pack_from(fmt, BytesData, offset)按照fmt指定的格式要求,解析后面的内容,从offset处开始解析,返回的是数据元组这个里面的fmt表示格式化字符串,由两个部分组成,第一部分为指定大小端格式,第二部分是依次解析的格式。
大小端格式字符说明.> 大端模式和阅读顺序一致,高字节在前(内存地址小),低字节在后(地址大)。
页:
[1]