翼度科技»论坛 编程开发 python 查看内容

python进行二进制数据处理的方法

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
方法一:

使用struct模块,特点轻量化,简单易用。缺点就是可读性不是太好,使用小数据临时使用一下,对于大量的数据解析,写起来比较繁琐,显得有点力不从心。
  1. import struct
  2. data = b'\x92\xaa\xbb\xcc\x11\x22\x33\x44'
  3. a,b,c,d,e = struct.unpack(">BBBBI", data)
  4. print("a=0x%x b=0x%x c=0x%x d=0x%x e=0x%x"%(a,b,c,d,e))
  5. packData = struct.pack(">BBBBI", a, b, c, d, e)
  6. print("packData: %s"%packData)
复制代码
上面的程序会按照给定的格式一次解析数据,得到的输出结果如下:
注:建议采用python3运行,python2不区分bytes和string类型,通过struct.pack()得到的结果为字符串类型,会打印出乱码。
  1. a=0x92 b=0xaa c=0xbb d=0xcc e=0x11223344
  2. 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]
来自手机

举报 回复 使用道具