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
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()); }
};