二进制读写文件必须使用std::ios::binary标志,否则换行符会被转换导致数据错乱;需用write()/read()操作原始字节,注意结构体序列化、字节序、内存对齐及跨平台兼容性。
二进制读写文件在 C++ 中必须用 std::ios::binary 标志打开流,否则换行符会被自动转换,导致数据错乱。
用 std::ofstream 以二进制模式写入原始数据
直接写入内存布局(如结构体、数组)时,不能依赖默认文本模式 —— 它会把 '\n' 转成 "\r\n"(Windows 下),破坏二进制一致性。
实操要点:
- 打开文件时务必传入
std::ios::binary,例如:std::ofstream ofs("data.bin", std::ios::binary); - 用
write()写入 raw 字节,参数是const char*和字节数:ofs.write(reinterpret_cast(&value), sizeof(value)); - 结构体若含指针或虚函数,不能直接 write —— 只能序列化其成员字段,否则写入的是地址值,读取时无效
- 写入前后建议检查流状态:
if (!ofs) { /* 错误处理 */ }
用 std::ifstream 以二进制模式读取原始数据
读取必须与写入方式严格对称:相同字节顺序、相同内存布局、相同 sizeof。否则读出来的值会是垃圾。
立即学习“C++免费学习笔记(深入)”;