关于Base64编码
解码为逆过程,有空就写
#include<bits/stdc++.h>
using namespace std;
char base[]= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'0','1','2','3','4','5','6','7','8','9','+','/'
};
string to_bin(char c)//字符转二进制字符串
{
int n=c;
string bin;
for (int i=7; i>=0; i--)
{
bin+=((n>>i)&1)+'0';
}
return bin;
}
char base_char(string s)//6位字符串转base64字符
{
int num=bitset<6> (s).to_ullong();
return base[num];
}
string to_base(string s)
{
string res;
int cnt=0;//base64以4个为一组,cnt统计字符个数,不是4的倍数加'='补齐
int len=s.size();
for(int i=0; i*6+6<=len; i++)//6个6个一组转化为base64字符
{
cnt++;
string tmp=s.substr(i*6,6);
res+=base_char(tmp);
}
int rest=s.size()%6;
if(rest!=0)//对剩余字符串小于六位补0
{
string end=s.substr(len-rest);
while(end.size()<6)
end+='0';
cnt++;
res+=base_char(end);
}
int eq=cnt%4;
if(eq!=0)//补齐使其成为base64编码
for(int i=eq; i<4; i++)
res+='=';
return res;
}
int main()
{
string s;
cin>>s;
string bin,res;
for(auto i:s)//每个字符都转化为二进制字符串
{
bin+=to_bin(i);
}
res=to_base(bin);//转化为base64编码
cout<<res;
return 0;
}