varint编码
varint是一种编码方式,用于对整数进行压缩和编码。它是一种可变长度的编码方法,可以用来对任何整数进行编码,而不需要预先知道该整数的大小。被广泛应用于网络通信协议中,例如Google的Protocol Buffers。
int
占4个byte
。
varint
长度可变,占1~5个byte
,其中每个byte
的最高位表示是否之后还有字节,1表示有,0表示无。
varint
一般是小端序存储,以下int
与varint
都以小端序为例。
表示数字 | int | varint |
---|---|---|
255 | 11111111 00000000 00000000 00000000 | 11111111 00000001 |
1 | 00000001 00000000 00000000 00000000 | 00000001 |
256 | 00000000 00000001 00000000 00000000 | 10000000 00000010 |
2^31 - 1 | 11111111 11111111 11111111 11111111 | 11111111 11111111 11111111 11111111 00000111 |
-5 | 11111011 11111111 11111111 11111111 | 11111011 11111111 11111111 11111111 00000111 |
varint本身的目的就是为了压缩编码,比如表示数字1,int需要4个字节,varint只需要1个字节,能节省3个字节;但是varint表示2^31-1或-5需要5个字节,由此可见其不适用于很大的数或负数。