Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HDF5C代码生成_C_Api_Code Generation_Hdf5 - Fatal编程技术网

HDF5C代码生成

HDF5C代码生成,c,api,code-generation,hdf5,C,Api,Code Generation,Hdf5,我想知道是否有一种工具能够从C数据结构生成C HDF5读写代码 typedef struct { int serial_no; double temperature; double pressure; } sensor_t; #include "hdf5.h" hid_t memtype; herr_t status; memtype = H5Tcreate (H5T_COMPOUND, sizeof (sensor_t)); status = H

我想知道是否有一种工具能够从C数据结构生成C HDF5读写代码

typedef struct {
    int     serial_no;
    double  temperature;
    double  pressure;
} sensor_t;

#include "hdf5.h"
hid_t memtype;
herr_t      status;
memtype = H5Tcreate (H5T_COMPOUND, sizeof (sensor_t));
status = H5Tinsert (memtype, "serial_no",    HOFFSET (sensor_t, serial_no), H5T_NATIVE_INT);
status = H5Tinsert (memtype, "temperature",  HOFFSET (sensor_t, temperature), H5T_NATIVE_DOUBLE);
status = H5Tinsert (memtype, "pressure",     HOFFSET (sensor_t, pressure), H5T_NATIVE_DOUBLE);


sensor_t    wdata[1];
status = H5Dread (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
status = H5Dwrite (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
我希望该工具能够解析C头文件并生成相应的C HDF5读/写代码

可以区分静态分配和动态分配。 第一次,我只对静态分配感兴趣

例如,我想根据结构传感器的定义生成以下代码,它包含一个int和两个double。显示的代码是typedef C结构到C HDF5结构的直接转换

typedef struct {
    int     serial_no;
    double  temperature;
    double  pressure;
} sensor_t;

#include "hdf5.h"
hid_t memtype;
herr_t      status;
memtype = H5Tcreate (H5T_COMPOUND, sizeof (sensor_t));
status = H5Tinsert (memtype, "serial_no",    HOFFSET (sensor_t, serial_no), H5T_NATIVE_INT);
status = H5Tinsert (memtype, "temperature",  HOFFSET (sensor_t, temperature), H5T_NATIVE_DOUBLE);
status = H5Tinsert (memtype, "pressure",     HOFFSET (sensor_t, pressure), H5T_NATIVE_DOUBLE);


sensor_t    wdata[1];
status = H5Dread (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
status = H5Dwrite (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
我在hdf网站上看了没有成功

我知道有些人尝试过使用Perl脚本实现HDF4


有意思。在NetCDF的土地上有。NetCDF-4引入了复合类型的概念。NetCDF4还可以使用HDF5文件格式作为底层容器格式

因此,不需要C头文件,但“CDL”标记非常简单:

netcdf demo {
types:
  compound mything {
    int id ;
    double d1 ;
    double d2 ;
  }; // mything
dimensions:
        d1 = 1 ;
variables:
        mything v1(d1) ;

// global attributes:
然后,您可以从中生成netcdf C代码:

ncgen -c mine.cdl
这不是你想要的。这根本不是你想要的,但它可能是你现在能得到的最接近的