string base64(string str) //base64加密算法
{
string base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 +/";//base64索引表
int str_len = str.length();
string res = "";
for (int strp = 0; strp < str_len / 3 * 3; strp += 3)
{
res += base64_table[str[strp] >> 2];
res += base64_table[(str[strp] & 0x3) << 4 | (str[strp + 1]) >> 4];
res += base64_table[(str[strp + 1] & 0xf) << 2 | (str[strp + 2]) >> 6];
res += base64_table[(str[strp + 2]) & 0x3f];
//cout<<res<<endl;
}
if (str_len % 3 == 1)
{
int pos = str_len / 3 * 3;
res += base64_table[str[pos] >> 2];
res += base64_table[(str[pos] & 0x3) << 4];
res += "=";
res += "=";
}
else if (str_len % 3 == 2)
{
int pos = str_len / 3 * 3;
res += base64_table[str[pos] >> 2];
res += base64_table[(str[pos] & 0x3) << 4 | (str[pos + 1]) >> 4];
res += base64_table[(str[pos + 1] & 0xf) << 2];
res += "=";
}
return res;
}
为什么要有str_len / 3 * 3,我把/ 3 * 3删除,就无法编码。
res += base64_table[(str[strp] & 0x3) << 4 | (str[strp + 1]) >> 4];
res += base64_table[(str[strp + 1] & 0xf) << 2 | (str[strp + 2]) >> 6];
res += base64_table[(str[strp + 2]) & 0x3f];
这些代码是怎么实现编码的?base64原理我去学习了,但看这代码还是没理解为什么这么写
{
string base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 +/";//base64索引表
int str_len = str.length();
string res = "";
for (int strp = 0; strp < str_len / 3 * 3; strp += 3)
{
res += base64_table[str[strp] >> 2];
res += base64_table[(str[strp] & 0x3) << 4 | (str[strp + 1]) >> 4];
res += base64_table[(str[strp + 1] & 0xf) << 2 | (str[strp + 2]) >> 6];
res += base64_table[(str[strp + 2]) & 0x3f];
//cout<<res<<endl;
}
if (str_len % 3 == 1)
{
int pos = str_len / 3 * 3;
res += base64_table[str[pos] >> 2];
res += base64_table[(str[pos] & 0x3) << 4];
res += "=";
res += "=";
}
else if (str_len % 3 == 2)
{
int pos = str_len / 3 * 3;
res += base64_table[str[pos] >> 2];
res += base64_table[(str[pos] & 0x3) << 4 | (str[pos + 1]) >> 4];
res += base64_table[(str[pos + 1] & 0xf) << 2];
res += "=";
}
return res;
}
为什么要有str_len / 3 * 3,我把/ 3 * 3删除,就无法编码。
res += base64_table[(str[strp] & 0x3) << 4 | (str[strp + 1]) >> 4];
res += base64_table[(str[strp + 1] & 0xf) << 2 | (str[strp + 2]) >> 6];
res += base64_table[(str[strp + 2]) & 0x3f];
这些代码是怎么实现编码的?base64原理我去学习了,但看这代码还是没理解为什么这么写
