我尝试使用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是不正确的。我是不是在代码中犯了什么错误或者漏掉了什么?
发布于 2020-07-12 10:41:56
https://stackoverflow.com/questions/62856342
复制相似问题