3个版本 (破坏性更新)
0.3.0 | 2022年1月21日 |
---|---|
0.2.0 | 2022年1月17日 |
0.1.0 | 2022年1月17日 |
#53 在 #byte-stream
11KB
170 行
biterator
本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);