gpt4 book ai didi

rust - nom::bits::bits返回的剩余数据不正确

转载 作者:行者123 更新时间:2023-12-03 11:45:10 24 4
gpt4 key购买 nike

我试图使用nom::bits::bits从&[u8]向量中提取7位,但是我发现剩余数据不正确,似乎它必须是4/8的整数倍,但我不是当然。
像这样的一些代码(标称值= 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不正确。
我会在代码中犯任何错误或遗漏某些东西吗?

最佳答案

documentation for bits中,它说:

Afterwards, the input is converted back to a byte-level parser, with any remaining bits thrown away.


因此,当您占用7位时,最后一位将被丢弃,剩余的字节级数据将从下一个完整字节开始。

关于rust - nom::bits::bits返回的剩余数据不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62856342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com