Как записать stl :: string в файл HDF5 в Stack Overflow

Я использую библиотеку HDF5 CPP на платформе Windows. В основном я хочу написать составной тип данных в файл H5, который содержит std :: string.

Этот код не выдает никакой ошибки, но при записи в файл 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);
}

1

Решение

Я получил следующий обходной путь для сохранения строки в HDF5: —
Я должен преобразовать std :: string в 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);

}

Вот снимок файла: —
введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]