#codec #integer #integer-value #serialization #varint

vu64

64位整数的可变长度编码/解码

12次发布

0.1.11 2024年6月9日
0.1.10 2023年2月12日
0.1.8 2023年1月27日
0.1.5 2022年6月13日
0.1.2 2021年11月26日

#277 in 编码

Download history 6/week @ 2024-04-26 1/week @ 2024-05-24 2/week @ 2024-05-31 195/week @ 2024-06-07 67/week @ 2024-06-14 6/week @ 2024-06-21 2/week @ 2024-06-28 25/week @ 2024-07-05 103/week @ 2024-07-26 8/week @ 2024-08-02

111 每月下载次数
用于 2 crates

MIT/Apache

63KB
1.5K SLoC

vu64

crate Docs Rust Version Apache2/MIT licensed Test ubu Test mac Test win

u64的可变长度整数编码。这是一个简单快速的编码/解码器。

特性

  • 整数值长度压缩
  • 最低支持 rustc 1.58.1 (db9d1b20b 2022-01-20)

格式模式

前缀 精度 总字节数
0xxxxxxx 7位 1字节
10xxxxxx 14位 2字节
110xxxxx 21位 3字节
1110xxxx 28位 4字节
11110xxx 35位 5字节
111110xx 42位 6字节
1111110x 49位 7字节
11111110 56位 8字节
11111111 64位 9字节

这种格式类似于 vint64,但是0x00用0x00表示。

示例

编码

use vu64::encode;
assert_eq!(encode(0x0f0f).as_ref(), &[0x8F, 0x3c]);

解码

use vu64::decode;
let slice = [0x8F, 0x3c].as_ref();
assert_eq!(decode(slice).unwrap(), 0x0f0f);

编码和解码

use vu64::{encode, decode};
let val = 1234;
assert_eq!(decode(encode(val).as_ref()).unwrap(), val);

从缓冲区读取并解码

use vu64::io::ReadVu64;
let vec: Vec<u8> = vec![0xFF, 0xf0, 0xf0, 0x0f, 0x0f, 0xf0, 0xf0, 0x0f, 0x0f];
let mut crsr = std::io::Cursor::new(vec);
let r = crsr.read_and_decode_vu64();
assert!(r.is_ok());
assert_eq!(r.unwrap(), 0x0f0f_f0f0_0f0f_f0f0);

编码并将数据写入缓冲区

use vu64::io::WriteVu64;
let vec_0: Vec<u8> = vec![0xFF, 0xf0, 0xf0, 0x0f, 0x0f, 0xf0, 0xf0, 0x0f, 0x0f];
let vec: Vec<u8> = Vec::new();
let mut crsr = std::io::Cursor::new(vec);
let r = crsr.encode_and_write_vu64(0x0f0f_f0f0_0f0f_f0f0);
assert!(r.is_ok());
assert_eq!(crsr.get_ref().as_slice(), vec_0.as_slice());

变更日志

此crate的变更日志在这里。

参考

许可证

此项目根据您的选择,受以下任一许可证的约束:

无运行时依赖

特性