Я пытаюсь взять 7 бит из вектора & [u8], используя nom :: bits :: bits, но обнаружил, что остальные данные неверны, кажется, это должно быть целое кратное 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
неверен. Я ошибаюсь в коде или что-то пропускаю?