【发布时间】:2021-12-27 03:32:18
【问题描述】:
我有一个包含以下内容的 HDF5 文件:
$ h5dump foo.h5
HDF5 "foo.h5" {
GROUP "/" {
ATTRIBUTE "Version" {
DATATYPE H5T_STRING {
STRSIZE 5;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SIMPLE { ( 1 ) / ( 1 ) }
DATA {
(0): "1.2.0"
}
}
...
如何从属性中提取STRSIZE(在本例中为 5)?我目前可以通过分配比我认为需要的更多的内存来提取整个字符串:
char version_string[] = "hello_hello_hello";
hid_t attr = H5Aopen(file_id, "Version", H5P_DEFAULT);
hid_t atype = H5Tcopy(H5T_C_S1);
H5Tset_size(atype, 17);
herr_t err = H5Aread(attr, atype, version_string);
H5Aclose(attr);
H5Tclose(atype);
但是,我不知道如何找到为字符串分配内存的正确。
【问题讨论】:
-
您使用的是什么 HDF5 库和版本?
-
@Dai: HDF5 版本 1.12.1
-
当您在
H5Aread中覆盖时,为什么version_string具有来自字符串文字的初始内容? -
你为什么使用
H5Tcopy?您应该可以将H5T_C_S1直接传递给H5Aread。 -
@Dai:它有初始内容,因为我是一个糟糕的 C 程序员并且试图避免使用 malloc。