HDF5 C ++读取属性的内容

时间:2014-04-03 15:39:55

标签: c++ attributes hdf5

我尝试读取属性的内容。我使用C ++和HDF5 API。 我的脚本看起来像这样:

#include <iostream>
#include <string>
#ifndef H5_NO_NAMESPACE
#ifndef H5_NO_STD
using std::cout;
using std::endl;
#endif // H5_NO_STD
#endif
#include "H5Cpp.h"
#ifndef H5_NO_NAMESPACE
using namespace H5;
#endif

const H5std_string FILE_NAME ("file.h5");
const H5std_string GROUP_NAME_what ("here/where");

int main (void)
{


    H5File file( FILE_NAME, H5F_ACC_RDONLY );

    /*
     * open Group and Attribute
     */
    Group what= file.openGroup( GROUP_NAME_what );
    Attribute attr = what.openAttribute("lat");


    H5std_string test;

    DataType type = attr.getDataType();
    attr.read(type,test);

    cout << test << endl;

    return 0;

}

test中应该写的是:

ATTRIBUTE "lat" {
                  DATATYPE  H5T_IEEE_F64LE
                  DATASPACE  SCALAR
                  DATA {
                  (0): 48.3515
                  }
               }

但我得到的是:

lÐÞþ,H@

有人能说出我做错了吗?

坦克很多!!

2 个答案:

答案 0 :(得分:4)

我同意@Mathias。但是,您还需要为其指定test

的地址
double test = 0.0;

DataType type = attr.getDataType();
attr.read(type,&test);

cout << test << endl;

执行程序时,您将获得:

$ h5c++ -o test1 test1.cpp && ./test1
48.3515
$

我不是C ++程序员,但是你似乎没有做整个OO'nes,因为下面的内容不会更有意义吗?

int main (void)
{

        double test = 0.0;

        H5File    *file = new H5File( FILE_NAME, H5F_ACC_RDONLY );
        Group     *what = new Group (file->openGroup( GROUP_NAME_what ));
        Attribute *attr = new Attribute(what->openAttribute("lat"));
        DataType  *type = new DataType(attr->getDataType());

        attr->read(*type, &test);
        cout << test << endl;

        delete type;
        delete attr;
        delete what;
        delete file;

        return 0;

}

产量:

$ h5c++ -o test test.cpp &&./test
48.3515
$

答案 1 :(得分:1)

您尝试将浮点H5T_IEEE_F64LE写入字符串(H5std_string),但这不起作用。请尝试使用float test