读取图片文件必须用二进制模式(std::ios::binary),否则换行符误转换导致Base64编解码失败;需检查文件是否成功打开,用std::vector存储字节避免\0截断;Base64编码需手写,按3字节转4字符、补=号、查标准64字符表,并将char转unsigned char防止符号位干扰。

读取图片文件为二进制数据时,必须用 std::ios::binary
直接用文本模式打开图片(默认 mode)会导致换行符被误转换(如 Windows 的 \r\n 被转成 \n),Base64 编码后解码失败。这是最常踩的坑。
- 务必使用
std::ifstream file(path, std::ios::binary) - 检查是否成功打开:
if (!file.is_open()),否则后续读取为空 - 推荐用
std::vector存储原始字节,避免std::string对\0截断
Base64 编码逻辑不能依赖 std::string 的字符范围
C++ 标准库不提供 Base64 编码函数,需手写或引用轻量实现。核心是把每 3 字节(24 bit)拆成 4 组 6 bit,查表映射为 ASCII 字符。注意:
- 输入字节数不是 3 的倍数时,末尾要补
=:1 字节补 2 个=,2 字节补 1 个= - 查表字符串必须是 64 字符,标准顺序为
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" - 不要用
char直接转int—— 若系统char为 signed,负值会破坏位运算,应先转为unsigned char
完整可跑示例(无外部依赖)
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











