5 个版本 (3 个重大更改)
0.4.0 | 2020年10月8日 |
---|---|
0.3.0 | 2019年11月24日 |
0.2.0 | 2019年9月26日 |
0.1.1 | 2019年9月24日 |
0.1.0 | 2019年9月24日 |
#3 in #quantity
在 3 个 crate 中使用 (通过 xcell-types)
10KB
138 代码行(不含注释)
vlq
编码和解码 可变长度量 数据。
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
vlq = { package = "vlq-rust", version = "0.4" }
许可
许可协议为以下之一
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
lib.rs
:
算法
值长度量编码是实现可变长度整数的编码。
每个字节被编码为7位,字节中的最高位用于指示是否还有更多字节要读取。读取将一直继续,直到最高位为 1
,或者如果数字太大无法适应所需的类型,将导致错误。
例如,数字 60000
(或十六进制中的 0xEA60
)
11101010 01100000 [as u16]
11 1010100 1100000 [as separated into 7-bit groups]
1100000 1010100 11 [re-organized so least significant byte first]
11100000 11010100 00000011 [as VLQ-encoded variable-length integer]
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
vlq = { package = "vlq-rust", version = "0.2" }
使用 ReadVlqExt
和 WriteVlqExt
获取每个 std::io::Read
和 std::io::Write
实现上的 read_vlq
和 write_vlq
函数。
示例
use vlq::{ReadVlqExt, WriteVlqExt};
let mut data = std::io::Cursor::new(vec![]);
data.write_vlq(std::u64::MAX).unwrap();
data.set_position(0);
let x: u64 = data.read_vlq().unwrap();
assert_eq!(x, std::u64::MAX);
let mut data = std::io::Cursor::new(vec![]);
data.write_vlq(std::i64::MIN).unwrap();
data.set_position(0);
let x: i64 = data.read_vlq().unwrap();
assert_eq!(x, std::i64::MIN);