19 个不稳定版本 (6 个重大变更)
0.7.1 | 2020年2月2日 |
---|---|
0.6.9 | 2020年1月6日 |
0.6.8 | 2019年12月25日 |
0.6.6 | 2019年10月11日 |
0.4.0 | 2019年3月5日 |
#104 在 解析工具 中
每月61次 下载
在 bitstream_reader_derive 中使用
81KB
1.5K SLoC
bitstream_reader
用于读取任意位长度数据类型的工具,这些数据类型在源数据中可能不是字节对齐的
处理二进制数据的主要方式是首先创建一个 BitBuffer
,将其包装到 BitStream
中,然后从流中读取。
如果性能是关键因素,可以直接在 BitBuffer 上工作,这可能更快。
一旦有了 BitStream,有两种不同的方法可以读取数据
- 使用
read_bool
、read_int
、read_float
、read_byes
和read_string
读取原始类型、字符串和字节数组 - 使用
read
和read_sized
读取实现BitRead
或BitReadSized 特性的任何类型
BitRead
用于无需任何大小信息即可读取的类型(例如,null 终止的字符串、浮点数、整数等)BitReadSized
用于需要外部大小信息才能读取的类型(固定长度字符串、任意长度整数等)
如果所有字段都实现了 BitRead
或 BitReadSized
,则可以使用 #[derive]
与 BitRead
和 BitReadSized
特性一起使用。
示例
use bitstream_reader::{BitBuffer, LittleEndian, BitStream, BitRead};
#[derive(BitRead)]
struct ComplexType {
first: u8,
#[size = 15]
second: u16,
third: bool,
}
fn main() {
let bytes = vec![
0b1011_0101, 0b0110_1010, 0b1010_1100, 0b1001_1001,
0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111
];
let buffer = BitBuffer::new(bytes, LittleEndian);
let mut stream = BitStream::new(buffer);
let value: u8 = stream.read_int(7)?;
let complex: ComplexType = stream.read()?;
}
许可证
根据您的选择,许可为
- Apache 许可证第 2 版 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应如上双授权,不附加任何额外条款或条件。
依赖项
~1.4–1.9MB
~42K SLoC