BASE64编码

今天偶尔看到关于BASE64编码的原理,便去了解了一下关于字符编码的知识,这儿有篇链接讲得十分详细清晰http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html,如果有想了解关于2进制数据编码显示的具体过程,可以去看这篇博客。

如果计算机没有将二进制数据编码显示的功能的话,那么我们看到的都只是一串串的01而已,不同的编码规则其实也就是将这一串串的01进行拆分成N组,然后将每一组对应的字符显示出来,也就是我们平常看到的字符了。计算机存储数据是以字节为单位存储的,每个字节8位,这就意味着一个字节最多可以表示256个不同的字符。而BASE64编码是6位为一组进行编码的。就如下面的例子一样:

假如内存有这样3个字节的数据:[0110,0001] [0110,0010] [0110,0011]

BASE64编码之后变为:[011,000] [010,110] [001,001] [100,011]

BASE64编码6位一组,自然最多只能表示64个字符,因此使用A-Z,a-z,0-9,+,/来表示,顺序位A-/,上面的列子分别表示如下:

  • [011,000]=24 对应Y
  • [010,110]=22 对应W
  • [001,001]=9 对应J
  • [100,011]=35 对应j

因此上面的数据转换成BASE64编码之后就是YWJj,如果数据的位数不能整除6时,就像2个字节时,这个时候就会"差位补0"

如[0110,0001] [0110,0010]转换成[011,000] [010,110] [001,000],这个时候则位YWI,BASE64编码还有另外一个规则,那就是如果编码之后的位数不是4的倍数,则补"=",上面2个字节的例子则最终结果位YWI=。

值得说明的一点是,BASE64编码的格式所占用的空间大约是原本的4/3倍,不要以为它们所占用的空间一样,就像YWI=如果转换成二进制也不是原本的6位字节一组的BASE64编码了,而是4个8位的字节数据,6位一组只是编码的转换规则,数据并不是存为6位,而是8位!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值