用python编写二进制文件供C读取

用python编写二进制文件供C读取,python,c,binary,Python,C,Binary,我必须使用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]; ++nCn

我必须使用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;
        }

    }

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

使用python模块
数组
以C可以读取的格式写入数据

对于位数,
'f'
格式(float)应该可以工作

在C语言中,您可以这样阅读每一行:

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

假设这是一个
numpy
数组?您是否检查过:(建议的解决方案使用)?您不想对数据进行字符串化以实现通用性吗?例如,您可以将其存储在JSON中,在这种情况下,您将不依赖于endianness或bitness。您应该显示
struct gas\u particle
的声明。另外,
fread()
(和所有I/O一样)可能会失败,应该检查返回值。@unwind:什么不是C?现在更好了,
值的奇怪声明已经修复。尽管如此,它还是缺少一个指向
fread()
的参数,并且出现的参数的顺序错误。为什么答案中包含了C?OP说他必须使用一个已经编写好的C程序。@JohnY:啊,不知怎么的,我错过了。现在删除了我的否决票,因为
fread()
调用至少可以生成。:)
float values[3];
fread( values, sizeof( float ), 3, fh );