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://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。
依赖
~0.6–1.4MB
~29K SLoC