python 库 Construct 初步使用(一)

按照官网文档的介绍,Construct 库是一个二进制数据的解析工具包。当然也可以进行逆操作,将结构化对象保存为二进制数据。

安装用pip install construct 就OK。

现在用几个简单的例子说明一下基本用法

例1

from construct import *
A = Int32ub
res = A.parse(b'\x00\x00\x00\x01')
print(res)

结果为

1

将原始的4个字节的二制数据b’\x00\x00\x00\x01’ 解析成为一个32位整数

其它可以解析的数据类型很多,详细的可以查看 《Construct的官方文档

下面的几个例子是我随便选的,只是想验证一些自己的想法,不一定有全面的代表性
例2

from construct import *

ST1 = Struct(
    Const(b'a'),
    'v'/Byte
)

res = ST1.parse(b'a\x01\x02\x03\x04')

结果为

Container: 
    v = 1

注意结果中只有 v ,Const是不包含在结果中,如果要想在结果中包含常数,可如下
例3

from construct import *

ST1 = Struct(
    'k'/Const(b'a'),
    'v'/Byte
)

res = ST1.parse(b'a\x01\x02\x03\x04')

结果为

Container: 
    k = b'a' (total 1)
    v = 1

这时结果中就包含了常量串字段。注意一下例2与例3的区别

例4

from construct import *

ST1 = Struct(
    Const(b'a'),
    'v'/Byte
)

ST2 = Struct(
    Const(b'b'),
    'v'/Byte
)

A = Sequence(Select(ST1, ST2),Select(ST1, ST2))

res = A.parse(b'a\x01b\x02\x03\x04')

结果为

ListContainer: 
    Container: 
        v = 1
    Container: 
        v = 2

上面例子中的Select表示选择一个可以匹配得上的结构对二进制数据进行解析,如果找到了,就返回第一个匹配得上的,如果一个都匹配不,就返回None

更多的情形读者可以自已慢慢研究。

特别说明一点:现在发布的Construct 2.9版与以前的版本相比可以说进行了非常大,非常大的改动。我就是因为以前的一个python项目中用到了construct, 用2.9版执行时发生了非常多的错误。可以说以前用到construct的源码必须要彻底的检查和重写才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值