方法一:
使用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表示格式化字符串,由两个部分组成,第一部分为指定大小端格式,第二部分是依次解析的格式。
[table][tr]大小端格式字符说明.[/tr][tr][td]> [/td][td]大端模式[/td][td]和阅读顺序一致,高字节在前(内存地址小),低字节在后(地址大)。[/td][/tr][tr][td] |