首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 二進制文件讀寫:ofstream.write/ifstream.read 實現跨平台數據持久化

     編輯:程式設計綜合問答

核心誤區澄清

ofstream << i1 即使加 ios::binary 仍輸出文本形式(字符 '2')。流插入運算符 operator<< 始終按文本格式化,binary 僅抑制換行符轉換(Windows \n↔\r\n)。

正確二進制讀寫模式

// 寫入
int i1 = 2;
ofstream ofs("data.bin", ios::binary);
ofs.write(reinterpret_cast<char*>(&i1), sizeof(i1));
ofs.close();

// 讀取
int i2 = 0;
ifstream ifs("data.bin", ios::binary);
ifs.read(reinterpret_cast<char*>(&i2), sizeof(i2));
ifs.close();
// i2 == 2

跨平台注意事項

  • 端序差異:x86 小端,ARM 可能大端。網絡傳輸或跨架構文件共享需統一端序(如 htonl/ntohl 或手動字節序列化)。
  • 類型大小:int 可能 16/32/64 位。使用 int32_t、int64_t (<cstdint>) 固定寬度。
  • 結構體對齊:#pragma pack(push,1) 消除填充字節,確保內存佈局一致。

封裝建議:序列化工具類

class BinaryWriter {
    ofstream &os;
public:
    BinaryWriter(ofstream &s): os(s) {}
    void writeInt32(int32_t v) { os.write(reinterpret_cast<char*>(&v), 4); }
    void writeString(const string &s) { writeInt32(s.size()); os.write(s.data(), s.size()); }
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved