关于自定义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];
  1. // 以3个字节为一组
  2.     int data_len = src.length() / 3;
  3.     // std::cout << src.length() << std::endl;
  4.     // src的余数数据
  5.     int data_add = src.length() % 3;
  6.     int temp = 0;
  7.     int tmp = 0;
  8.     int n = 0;
  9.     while (temp < data_len)
  10.     {
  11.         encodeData[n++] = base64_table[src[tmp] >> 2];
  12.         encodeData[n++] = base64_table[(src[tmp] & 0x3) << 4 | src[tmp + 1] >> 4];
  13.         encodeData[n++] = base64_table[(src[tmp + 1] & 0x0f) << 2 | src[tmp + 2] >> 6];
  14.         encodeData[n++] = base64_table[src[tmp + 2] & 0x3f];
  15.         tmp += 3;
  16.         temp++;
  17.     }
  18.     // 余数为1,需要补齐2个=
  19.     if (data_add == 1)
  20.     {
  21.         encodeData[n++] = base64_table[src[tmp] >> 2];
  22.         encodeData[n++] = base64_table[(src[tmp] & 0x3) << 4];
  23.         encodeData[n++] = '=';
  24.         encodeData[n++] = '=';
  25.         encodeData[n] = '\0';
  26.     }
  27.     // 余数为2,需要补齐1个=
  28.     else if (data_add == 2)
  29.     {
  30.         encodeData[n++] = base64_table[src[tmp] >> 2];
  31.         encodeData[n++] = base64_table[(src[tmp] & 0x3) << 4 | src[tmp + 1] >> 4];
  32.         encodeData[n++] = base64_table[(src[tmp + 1] & 0xf) << 2];
  33.         encodeData[n++] = '=';
  34.         encodeData[n] = '\0';
  35.     }
  36.     else
  37.     {
  38.         encodeData[n] = '\0';
  39.     }
  40.     return std::string(encodeData);
  41. }
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表