上一篇博客中分享的案例里面base64编码的工具函数单独拿出来分享一下,为不想自己写的大佬提供快捷的CV路径
const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
std::string base64_encode(const std::string &input) {
std::string encoded;
size_t i = 0, j = 0;
uint8_t byte3[3] = {0};
uint8_t byte4[4] = {0};
// 遍历输入字符串中的每个字符
for (char byte : input) {
byte3[i++] = static_cast<uint8_t>(byte); // 假设输入是ASCII
if (i == 3) {
byte4[0] = (byte3[0] & 0xfc) >> 2;
byte4[1] = ((byte3[0] & 0x03) << 4) | ((byte3[1] & 0xf0) >> 4);
byte4[2] = ((byte3[1] & 0x0f) << 2) | ((byte3[2] & 0xc0) >> 6);
byte4[3] = byte3[2] & 0x3f;
// 添加编码后的字符到结果字符串
for (int k = 0; k < 4; k++) {
encoded += base64_chars[byte4[k]];
}
i = 0;
}
}
// 处理剩余字符(如果有)
if (i != 0) {
for (size_t k = i; k < 3; k++) {
byte3[k] = 0; // 填充剩余字节为0
}
// 执行编码,类似于前面的处理
byte4[0] = (byte3[0] & 0xfc) >> 2;
byte4[1] = ((byte3[0] & 0x03) << 4) | ((byte3[1] & 0xf0) >> 4);
byte4[2] = ((byte3[1] & 0x0f) << 2) | ((byte3[2] & 0xc0) >> 6);
// 添加编码后的字符到结果字符串
for (size_t k = 0; k < i + 1; k++) {
encoded += base64_chars[byte4[k]];
}
// 添加'='以填充到4的倍数
while (i++ < 3) {
encoded += '=';
}
}
std::cout << "base64 size:" << encoded.size() << std::endl;
return encoded;
}