我尝试读取属性的内容。我使用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@
有人能说出我做错了吗?
坦克很多!!答案 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
。