繁体   English   中英

HDF5 C ++读取属性的内容

[英]HDF5 C++ read the contents of an attribute

我尝试读取属性的内容。 我使用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@

有人可以告诉我我做错了什么吗?

坦克很多!

我同意@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
$

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM