base64

1.base64干嘛的?

是一种编码格式,可以将二进制数据转换为由64个可打印字符组成的串。

因为是可打印的字符,这样编码以后的串不会被转义,截断等处理,可以方便进行传输,这就是为什么要使用base64。

 

2.原理。

关于这部分,网上已经有很多了,这里就不详细记录。大致是:总共有64个可打印字符,那么需要6个bit来编码。正常而言,二进制数据在计算机内都是byte形式的,也就是8个bit。把将要编码的byte数据分为6bit一组,就可以拿到对应的base64格式的数据。

 

3.为什么一定要3个一组?

在编码的时候,如果待编码数据个字节数正好是3的倍数,那么可以对应整数个base64字符。

如果是余数1,比如4个byte。那么最后多出来的一个byte,需要两个base64字符同时再补两个==。

如果余数是2,比如5个bute。那么最后多出来的两个byte,需要3个base64字符同时再补一个=。

 

这里我一直有一个问题啊啊啊,也是写这篇博客的原因:

为什么必须补=?其实不补=,也可以通过字节数来做解码的。

补=会让最终的base64字符数始终是4的倍数。

查了好多地方,最后在wikipedia上找到了答案:

In theory, the padding character is not needed for decoding, since the number of missing bytes can be calculated from the number of Base64 digits. In some implementations, the padding character is mandatory, while for others it is not used. One case in which padding characters are required is concatenating multiple Base64 encoded files.

意思是说补位不是必须的,但是在某些场合下是需要的,比如一个文件拆成了许多份分开传输,最后需要合并,这时,每一个文件就必须补位。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值