BASE64 编码解码

原理很简单

a-z    ---> 26个字符

A-Z  ----> 26个字符

0-9 -----> 10个字符

+ /  -------> 2个字符

26 + 26 + 10 +2 = 64

C中一个数组,长度是64,那么,是从0 - 63来寻找数组里面的成员值的,

63的 二进制位 111 111 刚好是 6位

所以,6位来表示编码后的一个字符

好了,我们来构造 一个表

 

char *sTable={"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};

里面刚好是 64个字符 ,意味着 0 就表示A 1就表示B     11 (二进制) 就表示C

好了,表构造好了。。

 

比如我们有一个16进制的数字

0x88 0x88 0x88(16 进制)我们换算成 二进制

就是

10001000 10001000 10001000
我们分割一下,这样容易看

100010 001000 100010 001000

每6个一位,是不是通过我们上面的那个表就可以构造了呢?

 

 

好了,接下来就是特殊情况,

普通情况 三个字节 == 24位      如果我们要 按照每个6位来分组,是不是可以分为 4组?

也就是上面的,

接下来的是,你可能会问,如果 只有1个字节怎么办?

好来看一下

0x88 二进制 100010 00 通过分组以后,还多余两个00不够6位

这里怎么办?通过我个人的理解,如果只有一个字节,大家看如果是3个字节,那么计算是不是很方便,

大神们发明这个的时候,就想到了,如果对齐以后,是不是很方便?那么我们 1个字节要对齐到3个字节

是不是解码的时候,我们并不知道编码的时候多加了两个字节?为了 很明显的表示,,多加两个字节在编码

以后就多加两个 '='

好了,现在是两个字节的情况下,通过上面的介绍,我们对齐一下,也就是 对齐到三个字节,需要添加一个'='

 

通过对齐以后,就很好处理了,好了大家有什么不懂,可以下载代码看一下

 

 

 

 

源码下载地址:

http://download.csdn.net/detail/u012607841/6557835


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值