首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nom::bits::bits返回的剩余数据不正确

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

Stack Overflow用户
提问于 2020-07-12 09:59:04
回答 1查看 49关注 0票数 0

我尝试使用nom:: bits ::bits从&u8向量中提取7位,但我发现剩余的数据是不正确的,似乎它一定是4/8的整数倍,但我不确定。像这样的代码(nom= 5.12):

代码语言:javascript
运行
复制
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);
}

和输出:

代码语言:javascript
运行
复制
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是不正确的。我是不是在代码中犯了什么错误或者漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-07-12 10:41:56

documentation for bits中,它说:

之后,输入被转换回字节级解析器,并丢弃任何剩余的位。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62856342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档