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

问题描述 投票:1回答:1

考虑组织为数据段的二进制文件,其中前4个字节是段类型,接下来的4个字节是段长度,其余字节是原始数据。我可以解析第一部分,如:

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

    (SomethingParsed {segments: ?})
))

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

rust nom
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.