# README
base62编解码方案
-
简介:顾名思义,它使用62个可打印字符(A-Z,a-z,0-9)来编码二进制(8bit数据)
-
映射规则
- 十进制的0-9 -> 62进制 0-9
- 十进制的10-35 -> 62进制 a-z
- 十进制的36-61 -> 62进制 A-Z
-
原理 与base64原理类似,base62编解码方案将由任意8bit组成的字节流 通过拆分-填充-重组的方式转换为由62个可打印字符组成的字符串来表示:
- 第一步:将待转换字节流 按照每5Byte一组进行分组(一组就是40bit)
- 第二步:将40b按bit再次分组,每5b一组,共8组
- 第三步:按 11111 => 0011 1101的形式填充0位(分别是头部2个0,最后一位之前1个0)以使每组达到8bit长度,即变成8组8bit,共40bit就变成了64bit
- 第四步:根据base62映射表,将新的字节流每个字节替换为base62映射表中的字符,最后得到一串可打印字符串
空间浪费
base62映射表中的字符原本用5bit就可以表示,现在往里填充3个0bit,变成8bit,会有一定浪费。因此,base62编码之后的文本,比原文占用空间多大约60%
base64是一组6bit,每组填充2bit,编码结果空间膨胀约30%
为什么5字节一组?
因为5bit和8bit(1B)的最小公倍数是40,40b就是5B;(重点:将原始字节流划分为 一份为5bit的 多个bit组,再通过补0填充为8bit)
字节长度不足5Byte的情况
比如原始字节流:00000001 (1B),同样5bit一组划分,即 00000(1组) | 001(2组),第2组不足5bit在低位补0,得到 00100, 这里只有两组,再次对它们补0达到8bit,注意这时的补0形式是按上面第三步的方式进行,所以得到 0000 0000(1组) | 0000 1000(2组) 我们发现这里不足上面说的5组,没关系,在解码的时候判断字节长度就好了。
注意:base64的标准规范中,若分组不够时,会在尾部附加
=
,但其实可以不加,这里的base62编解码实现中就没有附加其他字符的逻辑
适用场景
因为base64使用的字符包含'+/',这两个字符在URL中属于专用字符需要转义后使用(转换为%xx的形式)较为麻烦,还有其他场景(如安全领域)、 也是同样的原因;这些场景使用base62显然更合适且简单
# Constants
No description provided by the author
# Type aliases
No description provided by the author
No description provided by the author