12个版本 (6个破坏性)
0.7.0 | 2021年10月19日 |
---|---|
0.6.2 | 2020年11月4日 |
0.6.1 | 2018年10月31日 |
0.5.0 | 2018年10月16日 |
0.1.0 | 2018年3月13日 |
#953 在 编码
每月182次下载
在 7 个crate(5个直接)中使用
34KB
693 行
VarU64
一个简单的无符号64位整数的可变长度编码。
规范
要解码varu64,查看第一个字节。如果其值小于248,则该值本身是编码的数字。否则,第一个字节确定编码的进一步 length
。
第一个字节 | 附加字节数 |
---|---|
248 | 1 |
249 | 2 |
250 | 3 |
251 | 4 |
252 | 5 |
253 | 6 |
254 | 7 |
255 | 8 |
在第一个字节之后是 length
个字节。这些字节是编码数字的大端表示。
在所有可能表示该方案接受的数字中,最短的一个是它的唯一有效编码。如果某个值使用了比必要的编码更长的编码,则解码器必须指示错误。
注释/属性
可以通过测试是否将第一个5位设置为1来有效地检查第一个字节是否表示长度。在这种情况下,长度本身是1加上最后三位的值。换句话说,additional_bytes = (first_byte & 0xf8 == 0xf8) ? (first_byte & 7) + 1 : 0
.
可以通过仅查看第一个字节来确定编码值的长度。
规范编码意味着如果有两个或更多附加字节,则可能没有前导零字节。如果只有一个附加字节,则附加字节必须大于或等于248。这意味着0-247以一个字节编码,但248-255以两个字节编码。
由于仅允许最短可能的编码的规范性要求,因此无符号64位整数和编码之间存在一一对应关系。
该格式的简洁性和规范性带来的代价是大量的未使用字节字符串(数量相对较多)。另一方面,这些字符串可以用作扩展点。
相关工作:本工作受到了multiformats varint存储库中问题的启发,特别是问题#8和#12。
许可证
规范(此文件)采用CC BY-SA 4.0许可,该存储库中的代码采用AGPL-3.0许可。
依赖
~1.5MB
~37K SLoC