为了账号安全,请及时绑定邮箱和手机立即绑定

python--二进制处理之construct库

标签:
Python
简介

小贴士

Construct库目前分为两大版本:Version 2.5.5Version 2.8

2.5版本是老版本,现在基本不维护了。2.8版本是2016年9月份发布。在API接口和实现上有着重大的改变。字段是无命名的,而且操作符/ >> []被用于创建结构体(Struct),序列(Sequences)和范围(Ranges)。

Construct是一个强大的描述式解析和构建二进制数据库。

几个重要的原始结构:

  • Fields:原始字节或数字类型

  • Structs and Sequences:将简单,基本的结构组装成更加复杂的结构

  • Bitwise:提供字节的build和sparse接口,针对bit-string

  • Adapters:改变数据的展现形式

  • Arrays/Ranges:重复的结构

  • Meta-constructs:使用context(history)去计算数据的大小

  • If/Switch:branch the computational path based on the context

  • On-demand(lazy) parsing: 读取与解析,在你需要的时候

  • Pointers:指针
思考

核心任务

二进制的数据处理怎么存在两个大的需求:一个是构建(build),有时也称为编码(encode);另一个就是解析(parse),有时也称为解码(decode)。

处理基础

对于python这种高级语言,对内存的操作是很有限的,基本是面对的字节进行,即8个bit。这样面对的对象,就有基本对象就有两种形式。

  • Byte-string(字节流)

  • Bit-string(位流)

bit-string在python中的处理其实也是转换成Byte-string进行的。

二进制处理的本质是什么

把一个byte-string或者bit-string按照一定的格式进行划分,翻译。

类详解

Bitwise与Bytewise

怎么去理解这两个类呢?

直白点说,这两个转换类,就是byte-string 与 bit-string之间的桥梁,可以理解成一种等价变换的关系。

传递过程:byte--->bit 把基于字节的输入转为bit-string,长度要能对应上。

例1

from construct import *
# 输入是正常的的整数,内部类是bit-string,所以需要经过Bitwise转换
d = Bitwise(BitsInteger(8))
d.build(255)
# 输出:'\xff'

传递过程:bit--->byte

例2

from construct import *
# bit--->byte,外是bit-string对应内部的byte,长度由内部决定
d = Bytewise(Byte)
d.build(2)
#输出:'\x00\x00\x00\x00\x00\x00\x01\x00'
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消