gpt4 book ai didi

c++ - 如何在 C++ 中将 STL::string 写入 HDF5 文件

转载 作者:太空狗 更新时间:2023-10-29 21:35:46 26 4
gpt4 key购买 nike

我在 Windows 平台上使用 HDF5 CPP 库。基本上我想将复合数据类型写入包含 std::string 的 H5 文件。

这段代码没有给出任何错误,但是在写入 H5 文件时它写入了垃圾值...

伙计们,任何提示都是有帮助的......

这是我的代码:-

#include <H5Cpp.h >
#include <vector>
#include <string>
#include <iostream>

using namespace std;
using namespace H5;


/**Compound datatype with STL Datatype*/
struct PostProcessingData
{
std::string datatype;
};
void main()
{
H5File file("ResultData.h5",H5F_ACC_TRUNC);
Group grp(file.createGroup("PostProcessing"));

PostProcessingData data;
data.datatype = "stress:xx";

// create spatial structure of data
hsize_t len = 1;
hsize_t dim[1] = {len};
int rank = 1;
DataSpace space(rank,dim);

// write required size char array
hid_t strtype = H5Tcopy (H5T_C_S1);
H5Tset_size (strtype, H5T_VARIABLE);

//defining the datatype to pass HDF55
H5::CompType mtype(sizeof(PostProcessingData));
mtype.insertMember("Filename", HOFFSET(PostProcessingData, datatype), strtype);


DataSet dataset = grp.createDataSet("subc_id2",mtype,space);
dataset.write(&data,mtype);
space.close();
mtype.close();
dataset.close();
grp.close();
file.close();
exit(0);
}

最佳答案

我得到了以下解决方法来将字符串存储在 HDF5 中:-我必须将 std::字符串转换为 char* 指针。HDF5 非常适合原始数据类型。

#include "H5Cpp.h"
#include <vector>
#include <string>
#include <iostream>


using namespace std;
using namespace H5;


/**Compound datatype with STL Datatype*/
struct PostProcessingData
{
char* datatype;
};

void main()
{
H5File file("ResultData.h5",H5F_ACC_TRUNC);
Group grp(file.createGroup("PostProcessing"));

PostProcessingData data;
std::string dt = "stress:xx";
data.datatype = new char[dt.length()];
data.datatype = const_cast<char*> (dt.data());

// create spatial structure of data
hsize_t len = 1;
hsize_t dim[1] = {len};
int rank = 1;
DataSpace space(rank,dim);

// write required size char array
hid_t strtype = H5Tcopy (H5T_C_S1);
H5Tset_size (strtype, H5T_VARIABLE);

//defining the datatype to pass HDF55
H5::CompType mtype(sizeof(PostProcessingData));
mtype.insertMember("Filename", HOFFSET(PostProcessingData, datatype), strtype);


DataSet dataset = grp.createDataSet("subc_id2",mtype,space);
//While writing data to file it gives following error
dataset.write(&data,mtype);
space.close();
mtype.close();
dataset.close();
grp.close();
file.close();
exit(0);

}

这是文件快照:- enter image description here

关于c++ - 如何在 C++ 中将 STL::string 写入 HDF5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com