Как выполнить простой цикл while и проанализировать блоки двоичных данных с помощью nom? - PullRequest
1 голос
/ 26 апреля 2019

Рассматривая двоичный файл, организованный как сегменты данных, где первые 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 Ответ

1 голос
/ 26 апреля 2019

Вы можете использовать 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

...