23 个版本
| 0.11.0 | 2024年4月4日 |
|---|---|
| 0.10.9 | 2022年12月13日 |
| 0.10.8 | 2022年8月6日 |
| 0.10.7 | 2022年5月1日 |
| 0.7.1 | 2020年2月12日 |
#1 在 #read-stream 中
每月352次下载
在 5 个 包中使用 (直接使用 4 个)
150KB
3K SLoC
bitbuffer
用于读取和写入任意位长度数据类型的工具,可能不是字节对齐的源数据
读取二进制数据的主要方式是首先创建一个 BitReadBuffer,将其包装成 BitReadStream,然后从流中读取。
一旦你有了位流,有两种不同的方法可以读取数据
- 使用
read_bool、read_int、read_float、read_bytes和read_string读取原语、字符串和字节数组 - 使用
read和read_sized读取实现BitRead或BitReadSized特性的任何类型BitRead用于无需任何大小信息即可读取的类型(例如,null 终端字符串、浮点数、整数等)BitReadSized用于需要外部大小信息才能读取的类型(固定长度字符串、任意长度整数等)
如果所有字段实现 BitRead 或 BitReadSized,则可以使用 #[derive] 与 BitRead 和 BitReadSized 特性一起使用。
对于写入数据,将输出 Vec 包装成 BitWriteStream,然后可以像使用 BitReadStream 一样使用它。
- 使用
write_bool、write_int、write_float、write_bytes和write_string读取原语、字符串和字节数组 - 使用
write和write_sized读取实现BitWrite或BitWriteSized特性的任何类型BitWrite用于无需任何大小信息即可写入的类型(例如,null 终端字符串、浮点数、整数等)BitWriteSized用于需要写入外部大小信息的类型(固定长度字符串、任意长度整数
与读取对应的 BitWrite 和 BitWriteSized 特性一样,如果所有字段都实现了 BitWrite 或 BitWriteSized,则可以使用 #[derive]。
示例
use bitbuffer::{BitReadBuffer, LittleEndian, BitReadStream, BitRead, BitWrite, BitWriteStream};
#[derive(BitRead, BitWrite)]
struct ComplexType {
first: u8,
#[size = 15]
second: u16,
third: bool,
}
let bytes = vec![
0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
];
let buffer = BitReadBuffer::new(&bytes, LittleEndian);
let mut stream = BitReadStream::new(buffer);
let value: u8 = stream.read_int(7)?;
let complex: ComplexType = stream.read()?;
let mut write_bytes = vec![];
let mut write_stream = BitWriteStream::new(&mut write_bytes, LittleEndian);
write_stream.write_int(12, 7)?;
write_stream.write(&ComplexType {
first: 55,
second: 12,
third: true
})?;
许可
许可方式为以下之一
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。
依赖
~0.6–1.4MB
~29K SLoC