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解析工具

Download history 10/week @ 2024-04-02

每月61次 下载
bitstream_reader_derive 中使用

MIT/Apache

81KB
1.5K SLoC

Crates.io Documentation Dependency status Build Status

bitstream_reader

用于读取任意位长度数据类型的工具,这些数据类型在源数据中可能不是字节对齐的

处理二进制数据的主要方式是首先创建一个 BitBuffer,将其包装到 BitStream 中,然后从流中读取。

如果性能是关键因素,可以直接在 BitBuffer 上工作,这可能更快。

一旦有了 BitStream,有两种不同的方法可以读取数据

  • 使用 read_boolread_intread_floatread_byesread_string 读取原始类型、字符串和字节数组
  • 使用 readread_sized 读取实现 BitReadBitReadSized 特性的任何类型
    • BitRead 用于无需任何大小信息即可读取的类型(例如,null 终止的字符串、浮点数、整数等)
    • BitReadSized 用于需要外部大小信息才能读取的类型(固定长度字符串、任意长度整数等)

如果所有字段都实现了 BitReadBitReadSized,则可以使用 #[derive]BitReadBitReadSized 特性一起使用。

示例

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.0许可证定义,您有意提交以包含在作品中的任何贡献,应如上双授权,不附加任何额外条款或条件。

依赖项

~1.4–1.9MB
~42K SLoC