4
我試圖寫入HDF5包含指向另一個指針的結構。事情是這樣的:HDF5:複合數據類型來寫一個包含指向另一個結構的結構
typedef struct{
int32_t method;
void* methodParams;
float result;
}Measure;
typedef struct{
int32_t param1;
int32_t param2;
}OneMethod;
下面的代碼來描述複合數據類型不起作用:
Measure value;
hid_t method_tid;
hid_t measure_tid;
method_tid = H5Tcreate(H5T_COMPOUND, sizeof(OneMethod));
H5Tinsert(method_tid, "P1", HOFFSET(OneMethod, param1), H5T_NATIVE_INT32);
H5Tinsert(method_tid, "P2", HOFFSET(OneMethod, param2), H5T_NATIVE_INT32);
measure_tid = H5Tcreate(H5T_COMPOUND, sizeof(Measure));
H5Tinsert(measure_tid, "Method", HOFFSET(Measure, method), H5T_NATIVE_INT32);
H5Tinsert(measure_tid, "Params", HOFFSET(Measure, methodParams), method_tid);
H5Tinsert(measure_tid, "Result", HOFFSET(Measure, result), H5T_NATIVE_FLOAT);
hsize_t dim[] = { 1 };
hid_t space = H5Screate_simple(1, dim, NULL);
hid_t dataset = H5Dcreate(objid, name, measure_tid, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
herr_t ret = H5Dwrite(dataset, measure_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &value);
H5Tclose(method_tid);
H5Tclose(measure_tid);
H5Sclose(space);
H5Dclose(dataset);
複合數據類型寫入,但methodParams
場丟失。我想是因爲我沒有指示圖書館期待指針在它的位置。我該怎麼做?
編輯
請考慮該結構是與指針,因爲每一種方法(由第一個結構的字段中給出)具有不同的達和種的參數。當然,一種方法是合併結構第一層所有方法的所有參數,這是我想避免的。
謝謝我明白,但這是我已經考慮過,我想避免。請參閱我的編輯。任何其他想法? –
有沒有簡單的方法來做你想做的事情。 –
HDF5庫I/O調用以最少的轉換消耗和發送數據緩衝區。基本上只是類型轉換和(壓縮)過濾器。它們不會爲您追逐指針或爲複雜的數據結構鋪平道路。包裝和拆包數據取決於客戶。 –