编解码:十六进制编解码中提到,编解码本质上是以不同的数据形式来展示“信息”,可以用二进制来表示,可以用十六进制来表示。
二进制的数据,在计算机中通常是不可读、不可打印的。
那有没有一种方式,可以让二进制的数据变成“可读可打印”的?
方法有很多,最常见的是十六进制编解码和Base64编解码。
十六进制编解码之前已介绍过,本文介绍Base64编解码。
百度百科:Base64是一种基于64个可打印字符来表示二进制数据的方法。
Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’(只可能出现0/1/2个等号,否则就是错误的)。
为啥只可能出现0/1/2个等号?动手算算就知道。
将所有的bit位用8n表示(n表示待编码数据字节数量),则当:
Base64编解码前后空间大小变化:
6字节的数据,在编码后占用8字节空间;空间多占用了2B,比原来大:2B/6B=1⁄3
8字节的数据,在解码后占用6字节空间;空间少占用了2B,比原来小:2B/8B=1⁄4
Demo:
参照对照表(摘自:http://base64.xpcha.com/):


Base64结果:YWJj
Code:
编译 && 执行:
需要注意:
为啥在编码时需要指明待编码数据长度?
原因是待编码数据不一定可读,是二进制数据,即,可能存在0x00,很显然不可以用strlen,那我在编码函数中如何知道其待编码数据长度呢?不知道!所以,调用编码函数时需要显示地指明待编码数据长度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/206925.html