如何执行简单的while循环并使用nom解析二进制数据块?

时间:2019-04-26 14:18:54

标签: rust nom

考虑将二进制文件组织为数据段,其中前4个字节为段类型,后4个字节为段长度,其余字节为原始数据。我可以像这样解析第一段:

named!(my_parser<&[u8], SomethingParsed>, do_parse!(
    segment_type: take!(4)      >>
    segment_length: be_u32      >>
    segment_data: take!(segment_length) >>

    (SomethingParsed {segments: ?})
))

如何重复该步骤,直到到达文件末尾?

1 个答案:

答案 0 :(得分:1)

您可以使用many0来应用解析器0次或更多次(如果需要至少一次通过,则可以使用many1)。

named!(my_iterated_parser<&[u8], Vec<SomethingParsed>>, many0!(my_parser));

参考:https://github.com/Geal/nom/blob/master/doc/choosing_a_combinator.md