在C++开发中,将图片的二进制数据经过Base64编码后写入文本文件,是一种常见的数据持久化手段。这种做法可以让图片以纯文本形式保存,便于通过配置文件或日志进行传递。

实现思路
整体流程分为三步:首先从磁盘读取图片的二进制内容,接着使用Base64算法将字节流编码为字符串,最后把字符串写入文本文件。
读取图片二进制
我们可以利用std::ifstream以二进制模式打开图片,将内容读入std::vector<unsigned char>容器中。
Base64编码原理
Base64把每3个字节(24位)拆分为4个6位组,每个6位值映射到字符表。若不足3字节,则补零并用等号填充。
完整代码示例
下面给出一个可编译运行的C++示例,演示图片转Base64并存入文本文件的过程。
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
// Base64编码表
const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
// 将二进制数据编码为Base64字符串
std::string base64_encode(const std::vector<unsigned char>& data) {
std::string out;
int val = 0;
int bits = -6;
for (unsigned char c : data) {
val = (val << 8) + c;
bits += 8;
while (bits >= 0) {
out.push_back(base64_chars[(val >> bits) & 0x3F]);
bits -= 6;
}
}
if (bits > -6) {
out.push_back(base64_chars[((val << 8) >> (bits + 8)) & 0x3F]);
while (out.size() % 4 != 0) out.push_back('=');
}
return out;
}
int main() {
// 图片路径,可替换为实际文件
std::string img_path = "test.jpg";
std::ifstream file(img_path, std::ios::binary);
if (!file) {
std::cerr << "无法打开图片文件" << std::endl;
return 1;
}
// 读取二进制数据
std::vector<unsigned char> buffer((
std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
file.close();
// 编码并写入文本文件
std::string encoded = base64_encode(buffer);
std::ofstream out_file("image_base64.txt");
out_file << encoded;
out_file.close();
std::cout << "图片已编码并存入 image_base64.txt" << std::endl;
return 0;
}
注意事项
- 读取文件失败时需检查路径和权限。
- 大图片生成的文本会很大,不建议用于性能敏感场景。
- 若需还原图片,只需对文本做Base64解码并写回二进制文件。
小结
通过上述方式,我们可以轻松用C++将任意图片转为Base64文本并保存。该方案简单稳定,适合配置文件嵌入、接口传输等实际需求。