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 编码
111 每月下载次数
用于 2 crates
63KB
1.5K SLoC
vu64
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());
变更日志
参考
许可证
此项目根据您的选择,受以下任一许可证的约束:
- Apache许可证2.0版 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
。