继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

python--二进制处理之construct库

慕士塔格
关注TA
已关注
手记 8
粉丝 20
获赞 124
简介

小贴士

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'
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP