问题
有一个文件里面有多个标题,但对我来说,它只重要一个和它之后的数据。此标头在文件中重复多次。
它的幻数是:ASCII 或0x65 0x51 0x48 0x54 0x52
HEX 格式的 A3046。在找到第一个字节后,解析器必须获取所有字节0xff
,然后重复剩余的头,直到 EOF。
我的解决方案
首先我加载了文件:
let mut file = OpenOptions::new()
.read(true)
.open("../assets/sample")
.unwrap();
let mut full_file: Vec<u8> = Vec::new();
file.read_to_end(&mut full_file);
我用以下方法声明了幻数:pub static QT_MAGIC: &[u8; 5] = b"A3046";
作为测试,我编写了以下函数只是为了尝试它是否可以找到第一个标头。
fn parse_block(input: &[u8]) -> IResult<&[u8], &[u8]> {
tag(QT_MAGIC)(input)
}
但是,当测试运行时,Ok 是None
有价值的。它肯定应该找到一些东西。我做错了什么?
我没有发现使用 nom5 解析字节的示例,而且作为 rust 新手也无济于事。如何使用这些规则解析所有块?