HDF5
简介
HDF5 可以用来存储异构数据对象,包括图片,表,图,甚至 PDF 和 Excel. HDF5 中的数据存储在不同组(Group)中,类似于 Linux 文件树结构。HDF5 数据集 (Datasets) 存储原始数据和元数据 (Metadata) 包括数据类型,维度,属性与性质。
- 预定义数据类型 (pre-defined datatypes)
分为标准数据类型和本地数据类型。前者在任何平台上相同,eg. H5T_IEEE_F32BE
(32 bit float Big Endian);后者在不同机器上不同 - 延伸数据类型 (Derived Datatypes)
由预定义数据类型组合而来。
命名规则
H5A Attribute Interface
H5D Dataset Interface
H5F File Interface
类型
为保障跨平台可用,HDF5 内定义三种类型用来操作文件。
hid_t
作为对象句柄。hsize_t
用作维度。herr_t
接收返回状态。
例子
#include "hdf5.h"
#include "stdlib.h"
#include "stdio.h"
int main(){
hid_t file_id;
herr_t status;
file_id = H5Fopen("result.hdf5", H5F_ACC_RDWR, H5P_DEFAULT);
hid_t dataset_id = H5Dopen2(file_id, "/result", H5P_DEFAULT);
hid_t space_id = H5Dget_space(dataset_id);
hsize_t dims_out[2];
H5Sget_simple_extent_dims(space_id, dims_out, NULL);
int *dset_data = malloc(dims_out[0] * dims_out[1] * sizeof(int ));
status = H5Dread(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data);
printf("Read Status: %d \n", status);
printf("First Three Element %d %d %d \n", dset_data[0], dset_data[1], dset_data[2]);
status = H5Dclose(dataset_id);
status = H5Sclose(space_id);
status = H5Fclose(file_id);
free(dset_data);
return 0;
}
#include "hdf5.h"
#include "stdlib.h"
#include "stdio.h"
int main(){
hid_t file_id;
herr_t status;
file_id = H5Fcreate("file.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
int* dset = malloc(24*sizeof(int));
for(int i = 0; i < 24; i++){
dset[i] = i;
}
hsize_t dims[2];
dims[0] = 4;
dims[1] = 6;
hid_t dataspace_id = H5Screate_simple(2, dims, NULL);
hid_t dataset_id = H5Dcreate2(file_id, "/dset", H5T_NATIVE_INT, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset);
hid_t group_id = H5GOpen2(file_id, "/MyGroup", H5P_DEFAULT);
hid_t dataset2_id = H5Dcreate2(group_id, "dset2", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
status = H5Dclose(dataset_id);
status = H5Sclose(dataspace_id);
status = H5Fclose(file_id);
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)