下面是一个简单的C++实现的Base64编码和解码示例。这段代码可以帮助你将字符串转换为Base64格式,并且能够从Base64格式中恢复原始字符串。
C++ 示例代码
#include <iostream>
#include <string>
#include <vector>
// Base64字符集
static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
// 编码函数
std::string base64_encode(const std::string& input) {
std::string encoded;
int val = 0, valb = -6;
for (unsigned char c : input) {
val = (val << 8) + c;
valb += 8;
while (valb >= 0) {
encoded.push_back(base64_chars[(val >> valb) & 0x3F]);
valb -= 6;
}
}
if (valb > -6) { // 如果还有剩余的位,填充‘=’
encoded.push_back(base64_chars[((val << 8) >> valb) & 0x3F]);
encoded.append((valb == -2 ? "==" : "=")); // 根据剩余位数添加填充符
}
return encoded;
}
// 解码函数
std::string base64_decode(const std::string& input) {
std::vector<int> T(256, -1);
for (int i = 0; i < 64; i++)
T[base64_chars[i]] = i;
std::string decoded;
int val = 0, valb = -8;
for (unsigned char c : input) {
if (T[c] == -1)
break;
val = (val << 6) + T[c];
valb += 6;
if (valb >= 0) {
decoded.push_back(char((val >> valb) & 0xFF));
valb -= 8;
}
}
return decoded;
}
int main() {
std::string original_string = "Hello, Base64!";
// 编码
std::string encoded = base64_encode(original_string);
std::cout << "Encoded: " << encoded << "\n";
// 解码
std::string decoded = base64_decode(encoded);
std::cout << "Decoded: " << decoded << "\n";
return 0;
}
实现说明
Base64字符集:
base64_chars
字符串包含所有的Base64字符,用于编码和解码过程。
base64_encode
:- 遍历输入字符串,将每个字符转换为其对应的Base64值。
- 使用左移和按位与操作来处理字节流,并在需要时添加填充符号(
=
)。
base64_decode
:- 创建一个查找表,将每个Base64字符映射到其对应的值。
- 遍历输入字符串,逐个解析字符并还原成原始字节。
main
函数:- 测试了编码和解码过程,并打印出结果。
注意事项
- Base64通常用于数据传输,例如在电子邮件或HTTP中传输二进制数据,因此请确认此实现符合你的需求。
- 如果你的输入包含不合法的Base64字符,解码时可能会出现问题,你可以根据具体情况增加错误处理机制。
内容由零声教学AI助手提供,问题来源于学员提问