6

C データ構造から C HDF5 読み取りおよび書き込みコードを生成できるツールがあるかどうか疑問に思っていました。

そのツールで C ヘッダー ファイルを解析し、対応する C HDF5 読み取り/書き込みコードを生成したいと考えています。

静的割り当てと動的割り当てのケースを区別できます。初めて、私は静的割り当てだけに興味があります。

たとえば、1 つの int と 2 つの double を含む構造体 sensor_t の定義から次のコードを生成したいと考えています。表示されるコードは、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のウェブサイトを見てきました

http://www.hdfgroup.org

Perlスクリプトを使用してHDF4を試した人もいることを知っています

http://www.srl.caltech.edu/ACE/ASC/exhdfgen/index.htm

4

1 に答える 1

2

面白い。NetCDFの土地には「ncgen」があります。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:

次に、それからnetcdfCコードを作成できます。

ncgen -c mine.cdl

それはあなたが望むものではありません。それは本当にあなたが望むものではありませんが、おそらくあなたが今得ることができる最も近いものです。

于 2012-07-12T20:17:58.413 に答える