0
フロートの配列をC++で持っています。スペースを節約するためにバイナリファイルに保存しておき、後で再度読むことができます。ときに私、しかしフロートのファイルを読み書きする
ifstream zIn(string(outFile).append("_geom.txt"), ios::in | ios::binary);
float *chBuffer = new float[viewport[3] * viewport[2] * 4];
zIn.read(reinterpret_cast<char*>(chBuffer), sizeof(float)*viewport[3] * viewport[2] * 4);
zIn.close();
:
float *zbuffer = new float[viewport[3]*viewport[2]*4];
//.....
//.. populate array
//.....
ofstream zOut(string(outFile).append("_geom.txt", ios::out | ios::binary));
zOut.write(reinterpret_cast<char*>(zBuffer), sizeof(float)*viewport[3] * viewport[2] * 4);
zOut.close();
そして私は、データが正しく保存されたことを確認するために直後にファイルを再オープン:これを行うには、私は配列を書き込むために、次のコードを書きました2つの配列が等しいかどうかを確認すると、大きく異なる値が得られます。
for (int i = 0; i < viewport[3]; i++)
{
for (int j = 0; j < viewport[2]; j++)
{
int idx = 4 * (i*viewport[2] + j);
if ((zBuffer[idx] != chBuffer[idx]) || (zBuffer[idx + 1] != chBuffer[idx + 1]) || (zBuffer[idx + 2] != chBuffer[idx + 2])) {
cout << "1: " << zBuffer[idx] << " " << zBuffer[idx + 1] << " " << zBuffer[idx + 2] << endl;
cout << "2: " << chBuffer[idx] << " " << chBuffer[idx + 1] << " " << chBuffer[idx + 2] << endl;
}
}
}
データを誤って読み書きしていますか?私が読んだデータのキャスティングに問題はありますか?
です。 「激しく違う」とみなされるものは何ですか? – immibis