Crates.io | vu64 |
lib.rs | vu64 |
version | 0.1.11 |
source | src |
created_at | 2021-11-11 13:06:08.52016 |
updated_at | 2024-06-09 11:16:53.909874 |
description | variable length encode/decode for a 64-bits integer |
homepage | |
repository | https://github.com/aki-akaguma/vu64 |
max_upload_size | |
id | 480154 |
size | 85,107 |
The variable length integer encoding of u64. This is a simple and fast encoder/decoder.
Prefix | Precision | Total Bytes |
---|---|---|
0xxxxxxx |
7 bits | 1 byte |
10xxxxxx |
14 bits | 2 bytes |
110xxxxx |
21 bits | 3 bytes |
1110xxxx |
28 bits | 4 bytes |
11110xxx |
35 bits | 5 bytes |
111110xx |
42 bits | 6 bytes |
1111110x |
49 bits | 7 bytes |
11111110 |
56 bits | 8 bytes |
11111111 |
64 bits | 9 bytes |
This format is a like vint64
,
but 0x00 is represented by 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());
This project is licensed under either of
at your option.