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