构造中的动态长度/大小字段

问题描述

假设我有一个construct.Struct,如下所示:

my_struct = construct.Struct(
    "data_length_in_bytes" / construct.Int32ub,"login" / construct.CString("ascii"),"password" / construct.CString("ascii"),"foo" / construct.Int32ub,"bar" / construct.Int32ub,"baz" / construct.Int8ub
    )
)

是否有一种方法可以根据另一个字段的大小(加上其自身的4个字节)动态生成/计算data_length_in_bytes字段的内容

还是我应该使用没有data_length_in_bytes的Struct,然后在转换之后/之前在字段中添加/删除字段?

解决方法

尝试使用 Prefixed 类。它需要两个参数。第一个是 Field 指定如何以字节为单位存储大小,第二个是要存储的内容。

所以在这种情况下,你会写:

my_struct = construct.Prefixed(construct.Int32ub,construct.Struct(
    "login" / construct.CString("ascii"),"password" / construct.CString("ascii"),"foo" / construct.Int32ub,"bar" / construct.Int32ub,"baz" / construct.Int8ub
))