[英]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.