Construct 中的动态 length/size 字段

Dynamic length/size field in Construct

假设我有一个像这样的 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
    )
)

有没有办法generate/calculate data_length_in_bytes 字段的内容根据另一个字段的大小(加上它本身的 4 个字节)动态变化?

或者我应该使用不带 data_length_in_bytes 的结构,然后 add/remove after/before 中的字段转换它吗?

尝试使用 Prefixed class。它需要两个参数。第一个是 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
))