私はおそらくかなり簡単な質問をしています。私はすでにこのような類似の質問を見ましたが、試したすべてが私の場合は機能しません。私は3つの異なる整数値を持つクラスをバイナリファイルに保存しようとしています。 C++ストリームの演算子 "< <"/">>"のオーバーロードについてこれを解決する必要があります。だから私の実際のコードは、私のファイルにバイナリとして整数値を保存するようだが、バイナリファイルからそれらをロードしようとすると、元の値と同じではない整数値が返されます。
私のクラス:整数値を持つクラスをストリームオペレータでバイナリファイルに保存する>>/<<
class Time{
public:
int hour;
int minute;
int second;
};
私のメソッドは、ファイルへの単一の値を保存します。私はreinterpret_castはであり、例えばなしで、このいずれかを試してみました:(のchar *)$ time.hour
std::ostream& operator<<(std::ostream &os, Time &time){
os.write(reinterpret_cast<const char *>(&time.hour),sizeof(int));
os.write(reinterpret_cast<const char *>(&time.minute),sizeof(int));
os.write(reinterpret_cast<const char *>(&time.second),sizeof(int));
return os;
}
std::istream& operator >>(std::istream &is,Time &time){
is.read((char*)&time.hour,sizeof(int));
is.read((char*)&time.minute,sizeof(int));
is.read((char*)&time.second,sizeof(int));
return is;
}
マイコードこのため、結果に機能をテストするために1878006928 です:
int main() {
Time time;
time.hour = 24;
time.minute = 33;
time.second = 10;
std::ofstream os("test.txt", std::ios::binary | std::ios::out);
os << time;
Time time2;
std::ifstream is("test.txt",std::ios::binary | std::ios::in);
is >> time2;
std::cout << time2.hour;
}
あなたを願っています私の問題を理解することができます。
'書き込み操作後にos.flush()を呼び出します。 – ivaigult