vlq

795 阅读1分钟

目的

了解什么是vlq

概念

vlq是指Variable-length Quantity,是一种可变长度的编码。

它借用base64编码格式来表示。

base64

base64是利用64个可打印字符来表示二进制数字。

image.png

详解

  • 将数字用二进制表示,得到一连串的0和1
  • 从右往左数,分别隔成4bit,5bit,5bit,...,最左边的如果不足5个bit则用0补齐
  • 对于第一个4bit,如果当前数字是正数,则在后面补一个0,如果是负数则补一个1,得到一个5bit
  • 对于所有的5bit串,依次将右边的放到最左边,也就是按5bit为单位,逆序,得到一个新的5bit组
  • 对于新的5bit组,最右边的一个5bit在前面加一个0表示后面没有连续的bit了,剩余所有的5bit在前面加一个1表示后面的bit是一个整体,得到一个6bit组
  • 用base64对6bit组进行解析,得到一个base64字符串

示例见下图:

image.png

数字7用vlq编码后的base64编码是:O
数字1200用vlq编码后的base64编码是:grC
数字-17用vlq编码后的base64编码是:jB

用途

现在js打包工具source map就是用的vlq编码。

github实现了vlq算法:vlq

参考

[1]source map原理分析&vlq
[2]百度百科 base64
[3]github vlq