数据结构和算法(一):常用编码算法Base64的前世今生

前言:数据结构和算法是广大程序猿的痛点,当然对我来说也是,所以这段时间我自己也是在狂补数据结构和算法相关的知识,因为个人对数据结构和算法研究不是很深入,基本在学习的过程都是借鉴别人的博客以及自己购买的学习课程。从深度来说,是远远不够的,如果您阅读这系列博客觉得都太简单小儿科,可以将您深入的理解投稿给我,分享给积极学习的小伙伴们。但我相信,这些内容对绝大多数人都是不可多得的好材料。在写文章的时候我会把具体借鉴的文章地址做说明,如果是相关课程的话,我会给出具体课程所在位置以及购买的邀请码。

几年前面试的时候,数据结构和算法基本都是不问的,但是这几年随着程序猿数量的增加,互联网红利的下滑,面试越来越严格,要求也越来越高。源码+数据结构+算法都是家常便饭啦。对于有跳槽想法的你我,及时的补充数据结构和算法知识可是迫在眉睫的事情。

第一篇我们来一起认识一下Base64的前世今生。

参照"程序员小灰"公众号关于Base64讲解的文章

地址:漫画:什么是Base64算法?

ASCII码的原理

为什么要说ASCII码呢,因为出现Base64和这个是有所关联。

ASCII的范围是0127,总共是128个字符,其中031和127这33个字符属于控制字符,剩下的32~126这95个字符属于可打印字符,包含数字、大小写字母和常用符号。

在早期的一些传输协议,例如传输邮件的SMTP协议,只能传输可打印的ASCII字符。导致原本8Bit字节码(0~255)超出了可用的范围。比如邮件传输图片资源的时候,有一个Byte值是10111011B,对应十进制是187不属于ASCII码的范围,因此无法被传输。

这时候,Base64编码就应运而生啦。具体Base64是如何解决的呢?

Base64概述

Base64是一种编码算法,为什么叫Base64呢?因为这种算法只支持64个可打印字符。分别是26个大写字符、26个小写字母、10个数字以及+/两个字符。

Base64巧妙的使用6Bit字符表示原本的8Bit字符,这样可以将字符控制在可打印的范围内,可以囊括原本ASCII码中所有的字符。甚至可以将ASCII码之外的字符都转换成可打印的6Bit字符。

那到底是怎么将原本字节码是8Bit转换成成6Bit的呢?

Base64转换原理

Base64转换到底是怎么完成的呢?我们都知道8和6的最小公倍数是24,这样就可以使用4个Base64字符来表示3个传统的8Bit字符。这样有点抽象,且看下面的图片:

在这里插入图片描述

从图中可以知道,将原来的数据按照8Bit排列,然后用6Bit来截取,将截取的数据转换成10进制,这样就可以在Base64表中找到对应的字符。

这个例子是理想状态,如果原字符个数不是3个,而是4个,这个时候对应的8Bit位数就是32,不是最小公倍数的倍数,此时就需要使用0进行补位,补位后的位数必须是24的倍数,32加上8不能满足要求,只能是加上16,这样就可以啦,但是对应后两位都是0,这个时候就用=来替代,如下图:

在这里插入图片描述

通过这一个操作就可以看出来,为什么Base64加密后经常在编码后的字符串后面出现=啦。

Base64表

Base64对照表和ASCII的对照表不一样,这里需要注意一下,Base64对照表如下:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿洞晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值