2013-03-26 9 views
6

读我必须用C语言编写一个程序,从二进制文件以这种方式用Python写的二进制文件用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粒子的位置,即每个粒子的坐标。 我有一个蟒蛇阵列这些位置,它看起来像这样

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代码将精细读呢?

+0

据推测这是一个'numpy'阵列? – 2013-03-26 11:30:06

+1

您是否检查过此文件:http://stackoverflow.com/questions/807863/how-to-output-list-of-floats-to-a-binary-file-in-python(建议的解决方案使用http:// docs .python.org/2 /库/ array.html)? – furins 2013-03-26 11:34:32

+0

难道你不想将数据串化为通用性吗?例如,您可以将其存储在JSON中,在这种情况下,您不会依赖于排序或位数。 – 2013-03-26 11:41:39

回答

5

使用python模块array和它的tofile() method以C可以读取的格式或IO routines if you use numpy写入数据。

随着位数的数量,'f'格式(浮动)应该工作。

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

float values[3]; 
fread(values, sizeof(float), 3, fh); 
+0

-1,那不是C. – unwind 2013-03-26 12:06:20

+0

@unwind:什么不是C? – 2013-03-26 12:31:00

+0

现在好多了,“价值”的奇怪声明已经修复。但是,它缺少了'fread()'的参数,并且存在的参数以错误的顺序给出。 – unwind 2013-03-26 12:37:03