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

美食家大橙子  金牌会员 | 2024-2-26 10:32:33 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 927|帖子 927|积分 2781

方法一:

使用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]
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表