gpt4 book ai didi

c++ - 将( double )表写入二进制文件 IO C++

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:24 24 4
gpt4 key购买 nike

我需要写一个有四列的矩阵(“g_Grid.r”、“g_Grid.t”、“g_Grid.b”、“g_Grid.ph”)

通常,我使用文件流写入文件:

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”)。由于我真的不需要格式化文件,所以它更喜欢将它写成二进制文件。

问题:给定四个 vector/数组 (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 读取。

最佳答案

要将二进制数据写入文件,首先需要以二进制方式打开文件,需要使用fstream::write。它采用 char * 参数,并从中写入多个字节 - 如果数据不是 char< 的数组,则 char * 参数需要强制转换 或指向 char 的指针。

为了避免多次调用写入,最好将数据塞入一个结构中。

因此,以下应该满足您的需要:

ofstream fout; 
fout.open("GRID.dat", ios::binary);
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)
{
struct X
{
double a, b, c, d;
} x;

x.a = g_Grid.r[i];
x.b = g_Grid.t[j];
x.c = g_Grid.b[k];
x.d = g_Grid.ph[m];
fout.write(reinterpret_cast<char *>(&x), sizeof(x));
}
}
}
}
fout.close();

关于c++ - 将( double )表写入二进制文件 IO C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com