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)

Apache-2.0 OR MIT

10KB
138 代码行(不含注释)

vlq

Actions Status Documentation

编码和解码 可变长度量 数据。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
vlq = { package = "vlq-rust", version = "0.4" }

许可

许可协议为以下之一

任选其一。


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" }

使用 ReadVlqExtWriteVlqExt 获取每个 std::io::Readstd::io::Write 实现上的 read_vlqwrite_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);

无运行时依赖