intinli和intunli两种数据类型的占用字节大小是多少?
关于
intinli与intunli类型的定义说明 这两个不属于通用编程语言的标准内置类型,是对应存储规范自定义的缩写类型,命名拆解及规则如下:
intunli:是无符号小端可变长整数的缩写,全称为 unsigned little-endian variable-length integerintinli:是有符号小端可变长整数的缩写,全称为 signed little-endian variable-length integer
核心编码规则
两类类型都属于可变长编码,所占字节数不固定,没有固定的字节大小:
- 每个字节的最高位为「后续标识位」:最高位为
1时代表后续还有字节属于当前整数,最高位为0时代表当前字节是该整数的最后一个字节 - 每个字节的低7位为有效载荷位,按照小端规则拼接:先出现的字节的有效载荷对应整数的低位段,后出现的字节的有效载荷对应整数的高位段
- 有符号的
intinli通常会采用zigzag编码对负数做映射,避免负数高位全为1导致可变长编码长度固定到最大值
常见场景下,对应32位整数范围的可变长编码长度为15字节,对应64位整数范围的可变长编码长度为19字节,具体上限以你所持规范的术语定义章节说明为准。
编码示例
以intunli类型为例,字节序列0x81 0x02的解析过程:
- 第一个字节
0x81最高位为1,有效载荷为低7位0x01 - 第二个字节
0x02最高位为0,有效载荷为低7位0x02 - 小端拼接后结果为
(0x02 <<7) | 0x01 = 257,该整数共占用2字节
内容的提问来源于stack exchange,提问作者Yesyoor
相关产品推荐
相关产品推荐

