使用数据类型检测从HDF5文件中的数据集读取

时间:2014-07-21 18:07:51

标签: c hdf5 hdf

我目前尝试从C中的hdf5数据集中读取一些数据,如下所示。

dataset = H5Dopen(ic_group, 'vx', H5P_DEFAULT);
status = H5Dread(dataset, H5T_NATIVE_FLOAT, memspace,H5S_ALL,
                          H5P_DEFAULT, vx_ptr);

status = H5Dclose(dataset);

这里ic_group是一个包含数据集vx的组,memspace是内存中的hyperslab,vx_ptr是内存中的数据。这种方法很好,但是因为我想稍后使用不同的数据类型,我想直接从数据集中读取类型:

hid_t datatype;
datatype = H5Dget_type(dataset);
status = H5Dread(dataset, datatype, memspace,H5S_ALL,
                          H5P_DEFAULT, vx_ptr);

不幸的是,这种方法会导致函数H5Dread出现段错误。 也许我错过了什么?谢谢你的任何建议。

编辑:我不知道这是否有用,但gdb的回溯归结为 0x00007ffff5adbd1e in __memcpy_ssse3_back () from /lib64/libc.so.6

1 个答案:

答案 0 :(得分:1)

您可以使用H5Dget_type(dataset)检查从H5Tequal(datatype, H5T_<type>)返回的数据类型是否符合预期。它应该与用于写入数据集的数据类型以及等效类型vx_ptr相匹配(这可能是实际导致段错误的原因)。

此外,datatype需要使用H5Tclose(datatype)关闭。