题目:
Base64加密转换原理与代码实现
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<char> mp{ '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 ans;
string str;
cin >> str;
int index = str.size();
char add = 0;
int plus = 0;
if (index % 3 == 1) {
str.push_back(add);
str.push_back(add);
plus = 2;
}
if (index % 3 == 2) {
str.push_back(add);
plus = 1;
}
int start = 0;
index= str.size();
while (index >= 3) {
int temp1= str[start];
temp1 = temp1 << 16;
int temp2 = str[start+1];
temp2 = temp2 << 8;
int temp3 = str[start+2];
int res = temp1 | temp2 | temp3;
int sub1 = (res >> 18) & 0x3f;
int sub2 = (res >> 12) & 0x3f;
int sub3 = (res >> 6) & 0x3f;
int sub4 = res & 0x3f;
ans.push_back(mp[sub1]);
ans.push_back(mp[sub2]);
ans.push_back(mp[sub3]);
ans.push_back(mp[sub4]);
index -= 3;
start += 3;
}
if (plus == 1) {
ans.pop_back();
ans.push_back('=');
}
if (plus == 2) {
ans.pop_back();
ans.pop_back();
ans.push_back('=');
ans.push_back('=');
}
cout << ans;
return 0;
}