Как читать атрибуты в файле HDF5 с помощью интерфейса C++

У меня есть файл HDF5, в котором атрибуты находятся в формате ниже

ATTRIBUTE "dtype" {
   DATATYPE  H5T_STRING {
         STRSIZE 8;
         STRPAD H5T_STR_NULLPAD;
         CSET H5T_CSET_ASCII;
         CTYPE H5T_C_S1;
      }
   DATASPACE  SCALAR
   DATA {
   (0): "waveform"
   }
}

Я хочу получить форму волны из атрибутов. Я попробовал приведенный ниже фрагмент кода, но он дает сбой.

Group* signalgroup = new Group(outputgroup->openGroup(signalgrpName));
Attribute *attr = new Attribute(signalgroup->openAttribute("dtype"));
DataType  *type = new DataType(attr->getDataType());
H5std_string test;
attr->read(*type, &test); //crashes here

Любые данные о том, как это читать?


person rvkreddy    schedule 13.04.2017    source источник
comment
DataType *type = new DataType(attr->getDataType()); выглядит подозрительно. как насчет Datatype type = attr->getDataType()?   -  person Dmitri Chubarov    schedule 13.04.2017
comment
Пробовал с Datatype type = attr->getDataType(), все равно вылетает   -  person rvkreddy    schedule 13.04.2017


Ответы (1)


Это очень поздно, но я наткнулся на этот вопрос в поисках чего-то подобного. API HDF5 имеет перегруженную функцию attribute.read(), которая принимает std::string по ссылке (а не по указателю).

См. здесь в документации: https://support.hdfgroup.org/ HDF5/doc/cpplus_RM/class_h5attribute.read()1_attribute.html#a8dae50d14de724c87507cba37f86793d (цитируется ниже)

void H5::Attribute::read(const DataType& mem_type, H5std_string& strg) const

Parameters
mem_type    - IN: Attribute datatype (in memory)
strg    - IN: Buffer for read string
person dpuleri    schedule 15.07.2019