考虑将二进制文件组织为数据段,其中前4个字节为段类型,后4个字节为段长度,其余字节为原始数据。我可以像这样解析第一段:
named!(my_parser<&[u8], SomethingParsed>, do_parse!(
segment_type: take!(4) >>
segment_length: be_u32 >>
segment_data: take!(segment_length) >>
(SomethingParsed {segments: ?})
))
如何重复该步骤,直到到达文件末尾?
答案 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