c++ - 在C++中从HDF5读取复合数据类型的字符串

标签 c++ hdf5

我有一个用 Python 构建的 hdf5 复合数据集,我正在尝试从中读取数据。我有四列,其中一列是长度为 1 的字符串。我设法读取除字符串列之外的所有列。下面是示例代码,我尝试仅读取字符串列:

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

typedef struct data_type {
    char string_column[1];
} data_type;

int main ( void )
{
    int NBR_OF_ROWS = 28884;
    H5::H5File file = H5::H5File(MY_FILE, H5F_ACC_RDONLY);
    H5::DataSet dataset = H5::DataSet(file.openDataSet(MY_DATASET));

    H5::CompType mtype(sizeof(data_type));
    mtype.insertMember("member", HOFFSET(data_type, string_column),
            H5::PredType::C_S1);
    data_type *data = new data_type[NBR_OF_ROWS];
    dataset.read(data, mtype);

    std::cout << "string column " << data[0].string_column << std::endl;

    return 0;
}   

这可以编译但不打印任何内容:(我尝试在堆上分配数据数组但无济于事。我在 ubuntu 上使用 g++。

任何帮助将不胜感激。

最佳答案

我认为您的问题来自您使用的字符串数据类型。您没有指定大小,只是说它是一个字符串

尝试创建一个H5::StrType长度为1:

H5::StrType string_type(H5::PredType::C_S1, 1);

然后在复合数据类型中使用它:

mtype.insertMember("member", HOFFSET(data_type, string_column), string_type);

关于c++ - 在C++中从HDF5读取复合数据类型的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416416/

相关文章:

c++ - DLIB 是用于在 C++ 中开发我自己的机器学习算法的良好开源库吗?

python - 将包含 Numpy 数组的整个 HDF5 读入内存的最快方法

hdf5 - 将几个 hdf5 文件合并到一个 pytable 中

java - 如何在 Java 中增量增长无限的 HDF5 数据集

c++ - 学习C或C++会对我的计算机造成危险吗?

java - C++ 和 Java 的表达式求值顺序有何不同?

c++ - 尝试实现 is_constexpr() - 编译器分歧

c++ - 嵌套类模板特化

python - 是否可以从 Python 的 HDF5 文件中的复合数据集中读取字段名称?

python - 将数据从 hdf5 数据集传输到 numpy 数组时精度损失