如何从 C/C++ 中的 HDF5 数据类型获取数组大小

How to get array size from HDF5 DataType in C/C++

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

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");

我不必只从文件中获取 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);