2016-04-07 13 views
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; 
     } 
    } 
} 

データを誤って読み書きしていますか?私が読んだデータのキャスティングに問題はありますか?

+0

です。 「激しく違う」とみなされるものは何ですか? – immibis

答えて

1

ただ、これらの2行を見て:最初の行にタイプミスがあるように思わ

ofstream zOut(string(outFile).append("_geom.txt", ios::out | ios::binary)); 
ifstream zIn(string(outFile).append("_geom.txt"), ios::in | ios::binary); 

。多分目的は

ofstream zOut(string(outFile).append("_geom.txt"), ios::out | ios::binary); 
+0

ああ男の子、私には恥ずかしい。 10分で答えを受け入れることができます。どうもありがとう。 – maruko

関連する問題