包含hdf5头文件
#include "hdf5.h"
有关hdf5文件在vs中的配置请参考:安装HDF5及在VS下配置HDF5 - 心媛意码 - 博客园
1.打开文件
hid_t file_id;
file_id = H5Fopen("文件路径", H5F_ACC_RDONLY, H5P_DEFAULT);
2.对未知文件要遍历H5文件结构,查看文件有那些dataset
herr_t status;
status = H5Ovisit(file_id, H5_INDEX_NAME, H5_ITER_NATIVE, op_func, NULL, H5O_INFO_ALL);
herr_t op_func(hid_t loc_id, const char* name, const H5O_info_t* info,void*operator_data)
{
printf("/"); /* Print root group in object path */
/*
* Check if the current object is the root group, and if not print
* the full path name and type.
*/
if (name[0] == '.') /* Root group, do not print '.' */
printf(" (Group)\n");
else
switch (info->type) {
case H5O_TYPE_GROUP:
printf("%s (Group)\n", name);
break;
case H5O_TYPE_DATASET:
printf("%s (Dataset)\n", name);
break;
case H5O_TYPE_NAMED_DATATYPE:
printf("%s (Datatype)\n", name);
break;
default:
printf("%s (Unknown)\n", name);
}
return 0;
}
3.打开数据集dataset
hid_t dataset_id;
dataset_id = H5Dopen(file_id, "dataset", H5P_DEFAULT);
4.查看数据集dataset中数据的类型以及元数据的字节大小
hid_t dtype;
int len;
dtype = H5Dget_type(dataset_id);
len = H5Tget_size(dtype);
5.查看数据集dataset维度,以及每个维度的大小
int dims[];
int ndims;
hid_t space = H5Dget_space(dataset_id);
ndims = H5Sget_simple_extent_dims(space, dims, maxdims);
6.读取数据
char* data = (char*)malloc(sizeof(char) *dims[0]*dims[1]*...dims[ndims-1]);//根据数据类型分配相应的空间
status = H5Dread(dataset_id, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);