字符串转base64
来源:互联网 发布:阿里云备案拍照点 编辑:程序博客网 时间:2024/04/29 21:02
一、Base64简介
Base64编码,是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!
0~63对应到ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
二、字符串转Base64原理
转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择
中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
思路:
第一个输出字节:取第一输入字节的前6位,并且在高位补0,使其变成8位(一个字节)
第二个输出字节:取第一输入字节的后2位和第二个输入字节的前4位(共6位),并且在高位补0,使其变成8位(一个字节)
第三个输出字节:取第二输入字节的后4位和第三个输入字节的前2位(共6位),并且在高位补0,使其变成8位(一个字节)
第四个输出字节:取第三输入字节的后6位,并且在高位补0,使其变成8位(一个字节)
char* src = "ABC";int len = strlen(src);int nLeft = 3 - len % 3;char* dst = (char*)malloc((len+nLeft) * 4 / 3 + 1);str2base64(src, dst);cout << dst << endl;转换函数:void str2base64(char* src, char* dst){ static char base64Index[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int len = strlen(src); int nLeft = 3 - len % 3; char e[4]; int i, j; for (i = 0, j = 0;i < (len - len % 3); i+=3, j+=4) { e[0] = src[i] >> 2; e[1] = (src[i] & 0x03) << 4 | (src[i + 1] >> 4); e[2] = (src[i + 1] & 0x0f) << 2 | (src[i + 2] >> 6); e[3] = src[i + 2] & 0x3f; dst[j ] = base64Index[e[0]]; dst[j + 1] = base64Index[e[1]]; dst[j + 2] = base64Index[e[2]]; dst[j + 3] = base64Index[e[3]]; } if (nLeft == 2) { e[0] = src[i] >> 2; e[1] = (src[i] & 0x03) << 4; dst[j] = base64Index[e[0]]; dst[j + 1] = base64Index[e[1]]; dst[j + 2] = dst[j + 3] = '='; dst[j + 4] = '\0'; } else if(nLeft == 1) { e[0] = src[i] >> 2; e[1] = (src[i] & 0x03) << 4 | (src[i + 1] >> 4); e[2] = (src[i + 1] & 0x0f) << 2; dst[j ] = base64Index[e[0]]; dst[j + 1] = base64Index[e[1]]; dst[j + 2] = base64Index[e[2]]; dst[j + 3] = '='; dst[j + 4] = '\0'; } else { dst[j] = '\0'; }}
参考资料:
---
[1]base64--百度百科
[2] Base64 编码介绍、Base64编码转换原理、算法
[3] C++base64字符串转换
[4]Base64编码/解码
0 0
- 字符串转base64
- 图片转base64字符串
- js 字符串转base64
- 字符串转base64
- 图片转base64字符串和base64字符串转图片
- iOS图片转base64字符串和base64字符串转为图片
- js 中文字符串转base64
- nodejs 字符串转gbk base64
- Android 图片转Base64字符串
- base64图片字符串转图片
- pfx证书转base64字符串
- 整数转Base64字符串C
- C# imgage图片转base64字符/base64字符串转图片
- canvas加载base64字符串图片 canvas转base64图片错误
- java文件转base64位的字符串
- 字符串/字符数组转Base64编码
- BASE64加密图片字符串转码
- java图片与base64字符串互转
- 生活中的感悟
- 浏览器兼容性解决方案
- 程序员书单_J2EE专题
- HFP简介
- 知识总结1-2章
- 字符串转base64
- Activity向Fragment传递数据
- BestCoder Round #59 (div.2)
- iOS开发 ----- 自动循环滚动或引导页效果
- 程序员书单_UML篇
- Javascript在页面的执行顺序
- cmake构建qt工程
- domManip之prepend,append,before,after,replaceWith方法
- qt中vtk易出现错误