我正在尝试使用 nom::bits::bits 从 &[u8] 向量中取 7 位,但我发现剩下的数据不正确,似乎它必须是 4/8 的整数倍,但我不是当然。像这样的一些代码(nom = 5.12):
fn take_7_bits(i: &[u8]) -> IResult<&[u8], u32> {
nom::bits::bits(nom::bits::complete::take::<_, _, _, (_, _)>(7_usize))(i)
}
fn main() {
let input = vec![0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78];
println!("origin: {:X?}", &input);
let (remain, data) = take_7_bits(&input).unwrap();
println!("remain: {:X?}", remain);
println!("data: {:08X}", data);
let (remain2, data2) = take_7_bits(&remain).unwrap();
println!("remain2: {:X?}", remain2);
println!("data2: {:08X}", data2);
}
和输出:
origin: [AB, CD, EF, 12, 34, 56, 78]
remain: [CD, EF, 12, 34, 56, 78]
data: 00000055
remain2: [EF, 12, 34, 56, 78]
data2: 00000066
从输出中,您可以看到剩余数据的开头与 4/8 的整数倍对齐。所以第二个data2
是不正确的。我是否在代码中犯了任何错误或遗漏了什么?