Skip to content

Latest commit

 

History

History
34 lines (22 loc) · 2.18 KB

base62.md

File metadata and controls

34 lines (22 loc) · 2.18 KB

base62 & base64

之前在做event log的时候用到了base64, 用着挺方便,没有去细想它的原理。

最近学系统设计遇到了tinyURL,到处都有提到base64 还有 base62,所以打算搞清楚到底是什么。

就是64进制,62进制

看了下别人的代码,很简单,就是把整数转化为64进制或者62进制,0-9有十个值,a-z有26,A-Z有26,总共就有62个。 而64为可能会多加两个如=,/,+。

主要是利用64进制强大的表达能力,6位就可以表达62 ** 6 接近500多亿个表达,而且还都是一一映射。

为什么用base64作编码来传输

知乎上找了一段回答说的很好

Base64编码是从二进制值到某些特定字符的编码,这些特定字符一共64个,所以称作Base64。为什么不直接传输二进制呢?比如图片,或者字符,既然实际传输时它们都是二进制字节流。而且即使Base64编码过的字符串最终也是二进制(通常是UTF-8编码,兼容ASCII编码)在网络上传输的,那么用4/3倍带宽传输数据的Base64究竟有什么意义?真正的原因是二进制不兼容。某些二进制值,在一些硬件上,比如在不同的路由器,老电脑上,表示的意义不一样,做的处理也不一样。同样,一些老的软件,网络协议也有类似的问题。但是万幸,Base64使用的64个字符,经ASCII/UTF-8编码后在大多数机器,软件上的行为是一样的。

作者:Wang Kai
链接:https://www.zhihu.com/question/36306744/answer/673975520
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标准Base64编码解码无需额外信息即完全可逆

short url

回到最初的问题上,为什么用base64来压缩url,这主要是利用了6位base64可以存储500多亿不同的值这个特点。 现在互联网上的网页总数估算45亿多,那么理论上来讲可以做到一一对应。 在将long url转为short url的时候,对于每个新的url都赋予一个id值,这个id值是从1开始incremental的。那么就保证了唯一性。 同时利用base64的存储量,保证了可以存储所有的url