C语言储存二进制文件的函数,Python如何批量读取不同的文件,并打印每个文件中储存的所有变量名字

请大神指导,有一系列C语言储存函数生成的二进制文件,其储存函数结构类似(如下所示),但是储存函数循环中的变量个数不同, 现在如何用Python批量读取C语言函数来读取二进制文件并打印文件中所有变量名字?
感谢提供任何思路!

void dataload()
{
/* Load in Binary Format —————————- /
{
fl = fopen(flile1,”rb”);
/
Sizes of var definition /
sini=sizeof(n1);
slong=sizeof(m1);
sfloa=sizeof(ival0);
sdoub=sizeof(ival1);
/
Check sizes of variables /
fread(&szcur,1,1,fl);if (szcur!=sini) {exit(0);}
fread(&szcur,1,1,fl);if (szcur!=slong) {exit(0);}
fread(&szcur,1,1,fl);if (szcur!=sfloa) {exit(0);}
fread(&szcur,1,1,fl);if (szcur!=sdoub) {exit(0);}
/
Grid /
fread(&xnumx,slong,1,fl);
fread(&ynumy,slong,1,fl);
fread(&nodenum,slong,1,fl);
fread(&bondnum,slong,1,fl);
fread(&marknum,slong,1,fl);
fread(&timesum,sdoub,1,fl);
/
information /
fread(markn0,sdoub,rnum,fl);
fread(markn1,sdoub,rum,fl);
fread(marks0,sdoub,rnum,fl);
fread(marks1,sdoub,rnum,fl);
/
Node information /
for (m1=0;m1<nodenum;m1++)
{
fread(&ival0,sfloa,1,fl);pr[m1]=(double)(ival0);
fread(&ival0,sfloa,1,fl);vx[m1]=(double)(ival0);
fread(&ival0,sfloa,1,fl);vy[m1]=(double)(ival0);
fread(&ival0,slong3,fl);bon[m1]=(double)(ival0);
}
/
Grid /
for (m1=0;m1<xnumx;m1++)
{
fread(&ival0,sfloa,1,fl);gx[m1]=(double)(ival0);
}
for (m2=0;m2<ynumy;m2++)
{
fread(&ival0,sfloa,1,fl);gy[m2]=(double)(ival0);
}
/
Bondary /
for (m1=1;m1<bondnum;m1++)
{
fread(&m2,slong,1,fl);
fread(&m3,slong,1,fl);bondm[m2]=m3;
/
Check boundary array /
if(m3>MAXBON) {printf(“Space out in bondv[]”); exit(0);}
fread(&ival0,sfloa,1,fl);bondv1[m3][0]=(double)(ival0);
fread(&ival0,sfloa,1,fl);bondv1[m3][1]=(double)(ival0);
fread(&m2,slong,1,fl);bondn1[m3]=m2;
}
/
Markers/
for (mm1=0;mm1<marknum;mm1++)
{
/
General information load /
fread(&ival0,sfloa,1,fl);markx[mm1]=ival0;
fread(&ival0,sfloa,1,fl);marky[mm1]=ival0;
fread(&nn1,1,1,fl);markt[mm1]=(int)nn1;
}
}
/
Load in Binary Format —————————- */
fclose(fl);
}

Jason990420
最佳答案

Refer: Python struct

struct — 将字节串解读为打包的二进制数据

此模块可以执行 Python 值和以 Python bytes 对象表示的 C 结构之间的转换。 这可以被用来处理存储在文件中或是从网络连接等其他来源获取的二进制数据。 它使用 格式字符串 作为 C 结构布局的精简描述以及与 Python 值的双向转换。

>>> from struct import *
>>> pack('hhl', 1, 2, 3)
b'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', b'\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8
1年前 评论
讨论数量: 2
Jason990420

Refer: Python struct

struct — 将字节串解读为打包的二进制数据

此模块可以执行 Python 值和以 Python bytes 对象表示的 C 结构之间的转换。 这可以被用来处理存储在文件中或是从网络连接等其他来源获取的二进制数据。 它使用 格式字符串 作为 C 结构布局的精简描述以及与 Python 值的双向转换。

>>> from struct import *
>>> pack('hhl', 1, 2, 3)
b'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', b'\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8
1年前 评论

同样非常感谢!

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!