赞
踩
Run Length Encoding
部分,有介绍Base 128 Varints,并指明该varint来自protobuf中以十进制数305419896
为例,其对应的16进制表示为0x12345678
计算机中,输出存储的单位是byte(8 bit),可以存储2位16进制数
在大多数计算机资料中,存储地址以字节为单位进行编码,一般都是左边是低地址,右边是高地址
按照人类的阅读习惯,左边是数字的高位,右边是数字的低位
这时,如何将数据以二进制的形式存入计算机,就产生了分歧
方法一,被称作大端存储(big endian),the most significant bytes are stored before the less significant bytes.
方法二,被称作小端存储(little endian),the least significant bytes are stored before the more significant bytes
Base 128 Varints采用了little endian,是little endian的一种变种
每8个bit,实际只有7个bit对应真实的数据,最高位的bit表示是否还有下一个byte
具体的操作,举例如下:
十进制:127 二进制:111 1111 Varints:0111 1111 (最高位0,表示没有后续byte) ----> 16进制: 0x7f 十进制:128 二进制(7bit分隔): 1|000 0000 Varints: ① 取最低的7bit: 1000 0000 (最高位1,表示有后续byte)----> 16进制: 0x80 ② 剩余的1bit,不足补0: 0000 0001 (最高位0,表示没有后续byte)----> 16进制: 0x01 ③ 小端存储:0x80,0x01 十进制:16385 二进制(7bit分隔):1|000 0000|000 0001 Varints: ① 取最低的7bit: 1000 0001 (最高位1,表示有后续byte)----> 16进制: 0x81 ② 中间7bit: 1000 0000 (最高位1,表示有后续byte)----> 16进制: 0x80 ③ 剩余的1bit: 0000 0001 (最高位0,表示没有后续byte)----> 16进制: 0x01 ③ 小端存储:0x81,0x80,0x01
network order
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。