实现可变长度量(variable length quantity)的编码和解码。
本练习的目标是实现 VLQ 编码和解码。
简而言之,这种编码的目标是用一种能节省字节的方式来编码整数值。 每个字节中只有前 7 位是有效位(右对齐,有点像 ASCII 字节)。 所以,如果你有一个 32 位的值,就要把它拆解成一系列 7 位的字节。 当然,字节的数量取决于你的整数,是可变的。 为了标明哪个字节是序列中的最后一个,你要把第 7 位留为 0。 在它前面的所有字节中,都要把第 7 位设为 1。
所以,如果整数在 0-127 之间,就可以用一个字节表示。
虽然 VLQ 可以处理任意大小的数字,但在本练习中,我们只处理能放进 32 位无符号整数的数字。
下面是整数作为 32 位值的一些例子,以及它们对应的可变长度量:
NUMBER VARIABLE QUANTITY
00000000 00
00000040 40
0000007F 7F
00000080 81 00
00002000 C0 00
00003FFF FF 7F
00004000 81 80 00
00100000 C0 80 00
001FFFFF FF FF 7F
00200000 81 80 80 00
08000000 C0 80 80 00
0FFFFFFF FF FF FF 7F