首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
关于自定义Base64编解码的实现
返回列表
发新帖
关于自定义Base64编解码的实现
[复制链接]
发表于 2023-4-4 14:22:47
|
显示全部楼层
|
阅读模式
什么是Base64
Base64编码是将字符串以每3个8比特(bit)的字节子序列拆分成4个6比特(bit)的字节(6比特有效字节,最左边两个永远为0,其实也是8比特的字节)子序列,再将得到的子序列查找Base64的编码索引表,得到对应的字符拼接成新的字符串的一种编码方式。
每个3位8比特数据拆分成4个6比特数据过程如下图所示:
注意事项
Base64编码后的数据大小必须是4的倍数,当转换后的数据大小不是4的倍数时可以用‘=’号或者其他符号代替。
代码
实现
以下是我自定义的Base64编解码实现规则
编码部分
const char base64_table[] = "在此添加自定义base64编码规则";std::string encode(std::string &src)
{
char encodeData[10000000];
// 以3个字节为一组
int data_len = src.length() / 3;
// std::cout << src.length() << std::endl;
// src的余数数据
int data_add = src.length() % 3;
int temp = 0;
int tmp = 0;
int n = 0;
while (temp < data_len)
{
encodeData[n++] = base64_table[src[tmp] >> 2];
encodeData[n++] = base64_table[(src[tmp] & 0x3) << 4 | src[tmp + 1] >> 4];
encodeData[n++] = base64_table[(src[tmp + 1] & 0x0f) << 2 | src[tmp + 2] >> 6];
encodeData[n++] = base64_table[src[tmp + 2] & 0x3f];
tmp += 3;
temp++;
}
// 余数为1,需要补齐2个=
if (data_add == 1)
{
encodeData[n++] = base64_table[src[tmp] >> 2];
encodeData[n++] = base64_table[(src[tmp] & 0x3) << 4];
encodeData[n++] = '=';
encodeData[n++] = '=';
encodeData[n] = '\0';
}
// 余数为2,需要补齐1个=
else if (data_add == 2)
{
encodeData[n++] = base64_table[src[tmp] >> 2];
encodeData[n++] = base64_table[(src[tmp] & 0x3) << 4 | src[tmp + 1] >> 4];
encodeData[n++] = base64_table[(src[tmp + 1] & 0xf) << 2];
encodeData[n++] = '=';
encodeData[n] = '\0';
}
else
{
encodeData[n] = '\0';
}
return std::string(encodeData);
}
复制
代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
耶耶耶耶耶
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表