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://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应按照上述方式双许可,无需附加条款或条件。
依赖关系
~1.5MB
~36K SLoC