大端自定义 varint 的名称?

问题描述

我正在寻找我使用的大端自定义 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 (将#修改为@)