【发布时间】:2013-03-26 22:19:01
【问题描述】:
我必须使用一个用 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 代码可以很好地读取它?
【问题讨论】:
-
大概是
numpy数组吧? -
你检查过这个:stackoverflow.com/questions/807863/…(建议的解决方案使用docs.python.org/2/library/array.html)?
-
您不想为了通用性对数据进行字符串化吗?例如,您可以将其存储在 JSON 中,在这种情况下,您将不依赖字节序或位。
-
您应该显示
struct gas_particle的声明。此外,fread()(与所有 I/O 一样)可能会失败,应检查返回值。