protobuf 之 Varint

varint 背景

Varint 是一种紧凑的表示数字的方法。它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。
Varint 中的每个 byte 的最高位 bit 有特殊的含义,如果该位为 1,表示后续的 byte 也是该数字的一部分,如果该位为 0,则结束。其他的 7 个 bit 都用来表示数字。
如下图:(注意到最终计算前将两个 byte 的位置相互交换过一次,这是因为 Google Protocol Buffer 字节序采用 little-endian 的方式)
图片

举例

例如:
1、整数 300 的表示,需要两个字节:
1010 1100 0000 0010

2、整数 1 的表示,仅需一个字节:
0000 0001

占用字节数

采用 Varint,对于小的 int32 类型数字,可以用 1 个 byte 来表示;但是也有不好的一面,对于大数字来说依旧采用 Varint 表示法时,大到会需要 5 个 byte 来表示。
所以用 Varint 表示 int32 数字,占 1~ 5 Byte。如下:

int32 MAX 0111 1111 1111 1111 1111 1111 1111 1111

Varint32 1111 1111 1111 1111 1111 1111
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值