2 个版本
0.1.1 | 2024 年 7 月 23 日 |
---|---|
0.1.0 | 2022 年 5 月 23 日 |
#386 在 Rust 模式
每月 359 次下载
在 3 个包中使用 (通过 packetrs-impl)
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
BitRead
与 std::io::Read
特质类似,但其 API 是基于从 "位切片" 读取,而不是像 std::io::Read
那样基于 u8
切片。
BitWrite
BitWrite
与 std::io::Write
特质类似,但其 API 是基于向 "位切片" 写入,而不是像 std::io::Write
那样基于 u8
切片。
类型
BitCursor
BitCursor
与 std::io::Cursor
类型类似,但其 API 是基于位而不是字节。
依赖关系
~1MB
~28K SLoC