2 个版本

0.1.1 2024 年 7 月 23 日
0.1.0 2022 年 5 月 23 日

#386Rust 模式

Download history 99/week @ 2024-04-22 93/week @ 2024-04-29 34/week @ 2024-05-06 87/week @ 2024-05-13 59/week @ 2024-05-20 117/week @ 2024-05-27 158/week @ 2024-06-03 173/week @ 2024-06-10 138/week @ 2024-06-17 113/week @ 2024-06-24 61/week @ 2024-07-01 56/week @ 2024-07-08 92/week @ 2024-07-15 231/week @ 2024-07-22 27/week @ 2024-07-29 9/week @ 2024-08-05

每月 359 次下载
3 个包中使用 (通过 packetrs-impl)

Apache-2.0/MIT

43KB
1K SLoC

BitCursor

BitCursor 与 std::io::Cursor 类似,但它除了可以读取字节大小的数据块外,还可以从指定的缓冲区读取各种数量的位。它是基于 nsw_types 包构建的,用于非标准宽度类型,并利用 bitvec 提供更完整的实现。

示例

let data: Vec<u8> = vec![0b11100000, 0b11101111];
let mut cursor = BitCursor::from_vec(data);

// Read any non-standard-width type from the cursor
let u3_val = cursor.read_u3().unwrap();
assert_eq!(u3_val, nsw_types::u3::new(0b111));
// Sizes larger than 8 bits require a byte order argument
let u13_val = cursor
    .read_u13::<crate::byte_order::NetworkOrder>()
    .unwrap();
assert_eq!(u13_val, nsw_types::u13::new(0b0000011101111));

设计

特质

BitRead

BitReadstd::io::Read 特质类似,但其 API 是基于从 "位切片" 读取,而不是像 std::io::Read 那样基于 u8 切片。

BitWrite

BitWritestd::io::Write 特质类似,但其 API 是基于向 "位切片" 写入,而不是像 std::io::Write 那样基于 u8 切片。

类型

BitCursor

BitCursorstd::io::Cursor 类型类似,但其 API 是基于位而不是字节。

依赖关系

~1MB
~28K SLoC