7个版本 (4个重大更改)
| 0.7.1 | 2020年1月8日 |
|---|---|
| 0.7.0 | 2020年1月7日 |
| 0.6.0 | 2019年8月27日 |
| 0.5.0 | 2019年5月1日 |
| 0.3.0 | 2019年2月28日 |
#103 in #byte-slice
在 2 个crate中使用(通过 bitstream_reader)
21KB
363 行
bitbuffer
用于读取和写入任意位长度数据类型(可能在源数据中未对齐)的工具
读取二进制数据的主要方法是首先创建一个 BitReadBuffer ,将其包装到 BitReadStream 中,然后从流中读取。
一旦你有了BitStream,有两种不同的方法可以读取数据
- 使用
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 许可证定义的,您有意提交的任何贡献,均应按照上述方式双许可,无需附加条款或条件。
依赖关系
~1.5MB
~36K SLoC