#bits #iterator #bit #byte-stream

biterator

一个用于遍历字节流中单个比特的crate

3个版本 (破坏性更新)

0.3.0 2022年1月21日
0.2.0 2022年1月17日
0.1.0 2022年1月17日

#53#byte-stream

MIT 许可证

11KB
170

biterator

Crates.io Documentation

本crate提供了Biterator,这是一个遍历字节源中单个比特的迭代器。

示例

use biterator::{Biterator, Bit::*};

let bytes = [0b00001111, 0b10101011];
let b = Biterator::new(&bytes);

assert_eq!(
    b.collect::<Vec<_>>(),
    vec![
        Zero, Zero, Zero, Zero, One, One,  One, One,
        One,  Zero, One,  Zero, One, Zero, One, One,
    ]
);

lib.rs:

本crate提供了Biterator,一种遍历字节流中单个比特的类型。

示例

use biterator::{Biterator, Bit::*};

let bytes = [0b00001111, 0b10101011];
let bits: Vec<_> = Biterator::new(&bytes).collect();

assert_eq!(
    bits,
    vec![
        Zero, Zero, Zero, Zero, One, One,  One, One,
        One,  Zero, One,  Zero, One, Zero, One, One,
    ]
);

用于查找流中哪些比特被设置

use biterator::{Biterator, Bit, BiteratorExt};

let bytes = [0b00110101];
let set_bits: Vec<_> = bytes
    .iter()
    .bits()
    .enumerate()
    .filter(|(_, bit)| bit.is_one())
    .collect();

assert_eq!(
    set_bits,
    vec![(2, Bit::One), (3, Bit::One), (5, Bit::One), (7, Bit::One)]
);

计算缓冲区中为0的比特数

use biterator::BiteratorExt;

// There are 10 zeros here
let buf = [0b00110011, 0b11001111, 0b01010101];

let zero_bit_count = buf.iter().bits().filter(|&b| b.is_zero()).count();
assert_eq!(zero_bit_count, 10);

无运行时依赖