问题描述
我正在寻找我使用的大端自定义 varint 的名称。 (我几年前写的,但我怀疑它已经存在。)
测试代码可能比我能更好地解释编码:
#[test]
fn ravint_vec_test() {
assert_eq!(to_vec(0),[0b00000000] );
assert_eq!(to_vec(1),[0b00000001] );
assert_eq!(to_vec(126),[0b01111110] );
assert_eq!(to_vec(127),[0b01111111] );
assert_eq!(to_vec(128),[0b10000000,0b00000000] );
assert_eq!(to_vec(129),0b00000001] );
assert_eq!(to_vec(16510),[0b10111111,0b11111110] );
assert_eq!(to_vec(16511),0b11111111] );
assert_eq!(to_vec(16512),[0b11000000,0b00000000,0b00000000] );
assert_eq!(to_vec(16513),0b00000001] );
assert_eq!(to_vec(2113662),[0b11011111,0b11111111,0b11111110] );
assert_eq!(to_vec(2113663),0b11111111] );
assert_eq!(to_vec(2113664),[0b11100000,0b00000000] );
assert_eq!(to_vec(2113665),0b00000001] );
// ...
assert_eq!(to_vec(72624976668147838),[0b11111110,0xFF,0xFE] );
assert_eq!(to_vec(72624976668147839),0xFF] );
assert_eq!(to_vec(72624976668147840),[0b11111111,0x00,0x00] );
assert_eq!(to_vec(72624976668147841),0x01] );
assert_eq!(to_vec(u64::MAX - 1),0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E] );
assert_eq!(to_vec(u64::MAX),0x7F] );
}
编码的特点是:
- 大端
- 编码保留排序顺序
- 后面的字节数是第一个字节的前导字节数(无分支解码)
- 没有重复的编码,例如值 16384-16511,只需要两个字节而不是三个字节(比 Protocol Buffers 的 VarInt 空间效率高 0.7%)
谁能将其识别为预先存在的编码?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)