我需要寫一個四列(「g_Grid.r」,「g_Grid.t」,「g_Grid.b」,「g_Grid.ph」)的矩陣寫一個表格(雙打)到二進制文件IO C++
通常情況下,我用寫文件流文件:
ofstream fout;
fout.open("GRID.dat");
for (int m=0;m<N_PH;++m)
{
for (int k=0;k<N_B;++k)
{
for (int j=0;j<N_T;++j)
{
for (int i=0;i<N_R;++i)
{
fout << setprecision(32) << g_Grid.r[i]<<" "<<g_Grid.t[j]<<" "<<g_Grid.b[k]<<" "<<g_Grid.ph[m]<< endl;
}
}
}
}
fout.close();
其工作正常,但現在我處理非常大(長)矩陣,它需要年齡寫的格式化輸出(「.TXT」 )。由於我真的不需要格式化文件,所以它更願意將它寫爲二進制文件。
問題:給出四個矢量/陣列(R,T,B,PH),如何寫表到二進制文件? (我用MATLAB稍後閱讀這個文件,還需要讀它作爲一個二進制表)
編輯
通常情況下,我用下面簡單的代碼寫的二進制文件:
ofstream myFile (fileName, ios::out | ios::binary);
double val;
for (int m=0;m<N_PH;++m)
{
for (int k=0;k<N_B;++k)
{
for (int j=0;j<N_T;++j)
{
for (int i=0;i<N_R;++i)
{
val = g_N.Amp[m][k][j][i];
myFile.write(reinterpret_cast<const char*>(&val), sizeof(val));
}
}
}
}
myFile.close();
但是這個只會產生「單列」,而後面會被matlab讀取。
是否MATLAB剛讀浮點數並沒有「額外」信息的純二進制文件? –
@馬特彼得森 你是什麼意思?我使用非常簡單的命令來讀取二進制文件: fid = fopen(「name.dat」); X =的fread(FID, '雙'); 基本上,我可以將「四列」表重新排列爲「單列」,它將被matlab讀取並在稍後恢復「四列」。這是可行的。我想到了更簡單的方式來編寫和閱讀表格,而沒有額外的「黑魔法」。 –
好吧,對Matlab不太瞭解,所以不知道你可以簡單地告訴它從一個文件中讀取一堆浮點數。將寫出一個答案... –