7

我必须使用用 C 编写的程序以这种方式从二进制文件中读取数据

nCnt = 0;
for (i=0;i<h.nsph;++i) {
    fread(&gp,sizeof(struct gas_particle),1,fp);
    if (bGas) {
        kd->p[nCnt].iOrder = nCnt;
        for (j=0;j<3;++j) kd->p[nCnt].r[j] = gp.pos[j];
        ++nCnt;
        }

    }

上面的代码不是我正在使用的程序的全部代码,而只是与我的问题相关的部分。我需要读取nCnt粒子的位置,即每个粒子的坐标。我在 python 数组中有这些位置,看起来像这样

 pos=array([[[ 0.4786236 ,  0.49046784,  0.48877147],
    [ 0.47862025,  0.49042325,  0.48877267],
    [ 0.47862737,  0.49039413,  0.4887735 ],
    ..., 
    [ 0.4785084 ,  0.49032556,  0.48860968],
    [ 0.47849332,  0.49041115,  0.48877266],
    [ 0.47849161,  0.49041022,  0.48877176]]])

我应该如何在二进制文件中写入这个数组,以便 C 代码可以很好地读取它?

4

1 回答 1

6

使用 python 模块array及其tofile() 方法以 C 可以读取的格式写入数据,如果使用 numpy 则使用 IO 例程

有了位数,'f'格式(浮点数)应该可以工作。

在 C 中,您可以像这样读取每一行:

float values[3];
fread( values, sizeof( float ), 3, fh );
于 2013-03-26T11:35:30.863 回答