【问题标题】:How to get array size from HDF5 DataType in C/C++如何从 C/C++ 中的 HDF5 DataType 获取数组大小
【发布时间】:2016-11-21 17:23:24
【问题描述】:

我有 HDF5 数据文件要使用以下 DataType 读取

HDF5 "testFile.be01" {
GROUP "/" {
   DATATYPE "DRx3" H5T_COMPOUND {
      H5T_ARRAY { [5] H5T_STD_U32LE } "guid";
      H5T_STD_I32LE "version";
      H5T_IEEE_F64LE "d_tot";
      H5T_STD_U32LE "dwl_start_sec";
      ..... // More single item elements left out
      H5T_STD_U32LE "clock_dec_factor";
      H5T_STD_U32LE "num_samps_per_swp";
      H5T_STD_U32LE "sweep_index";
      H5T_STD_U32LE "sequence_dummy";
      H5T_ARRAY { [1000] H5T_COMPOUND {
         H5T_IEEE_F32LE "f_i";
         H5T_IEEE_F32LE "f_q";
      } } "wb_data";
   }

如您所见,在我的 H5T_COMPOUND 中有 2 个 H5T_ARRAY 对象。此示例中的第一个表示它的大小为 5,第二个表示大小为 1000。如果我有 DataType 对象来告诉这些数组的维度,有没有办法?我更喜欢使用 C++ 库,但 C 代码也可以。

// Open the file and datatype
std::string path = "/data/testFile.be01";
H5::H5File file(path, H5F_ACC_RDONLY);
H5::DataType datatype = file.openDataType("DRx3");

【问题讨论】:

    标签: c++ arrays hdf5


    【解决方案1】:

    我不必只从文件中获取 DataType 对象,我可以获取更有用的子类对象并获取我的 CompoundType 对象。然后我可以获取 ArrayType 成员并查询它的维度大小。

    // Open the file, dataset, and dataspace
    std::string path = "/data/testFile.be01";
    H5::H5File file(path, H5F_ACC_RDONLY);
    H5::CompType datatype = file.openCompType("DRx3");
    hsize_t wbDataSize[1];
    datatype.getMemberArrayType(datatype.getMemberIndex("wb_data")).getArrayDims(wbDataSize);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2020-07-24
      • 2021-07-23
      相关资源
      最近更新 更多