如何从C / C ++中的HDF5 DataType获取数组大小

时间:2016-07-19 00:47:52

标签: c++ arrays hdf5

我有要使用以下DataType读取的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");

1 个答案:

答案 0 :(得分: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);