[英]HDF5 C++ : I need get Group list, Dataset list, Attribute list in HDF5 file
[英]HDF5: Do I need to to explicitly set the byte order?
在HDF5組手冊中的某些HDF5示例中,字節順序被顯式設置為“ little endian”。 在另一些示例中,未給出明確的定義。 現在的問題是,我需要關心字節順序嗎? 我可以簡單地不指定它,而依靠默認值嗎?
一個示例的摘錄,其中明確指定了字節順序 :
DataSpace dataspace( RANK, dimsf );
IntType datatype( PredType::NATIVE_INT );
datatype.setOrder( H5T_ORDER_LE );
DataSet dataset = file.createDataSet( DATASET_NAME, datatype, dataspace );
如果我只使用以下內容怎么辦?
DataSpace dataspace( RANK, dimsf );
DataSet dataset = file.createDataSet( DATASET_NAME, PredType::NATIVE_INT, dataspace );
(我已經驗證了是否可以編譯並運行,如果我使用HDFView和h5py進行讀取,則給出相同的數據)
這不是一個明確的答案,但我發現值得分享(對評論來說太多了):
來自《 HDF5用戶指南》 第6章HDF5數據類型 :
2.3數據傳輸(讀和寫)
數據類型最常見的用途可能是從數據集或屬性寫入或讀取數據。 在這些操作中,每個數據元素都從源傳輸到目的地(可能會重新排列元素的順序)。 由於源和目標不必相同(即,一個是磁盤,另一個是內存),因此傳輸需要源元素和目標元素的格式。 因此,數據傳輸使用兩個數據類型對象作為源和目標。
寫入數據時,源是內存,目標是磁盤(文件)。 內存數據類型描述了機器內存中數據元素的格式,文件數據類型描述了磁盤上數據元素的所需格式。 同樣,在讀取時,源數據類型描述磁盤上數據元素的格式,而目標數據類型描述內存中的格式。
在最常見的情況下,文件數據類型是創建數據集時指定的數據類型,而內存數據類型應為適當的NATIVE類型。
這與之前評論中所說的並不矛盾...
寫入和讀取數據時,HDF5庫考慮兩種數據類型,一種在內存中,一種在磁盤上。
考慮一下H5Dread的文檔:
(部分)數據集的內存數據類型由標識符mem_type_id標識。 (...)數據類型轉換在讀取或寫入時發生,並且是自動的。
從磁盤上的數據類型將從數據集的元數據中推斷出來。 用戶指南中也對此進行了說明,有關詳細信息,請參見數據傳輸管道 (圖中相關部分為“轉換”)和數據傳輸:數據類型轉換和選擇 。
因此,在讀取數據時,您無需關心“磁盤上的內容”,它將由HDF5處理(包括字節序)。
如果在調用H5Dwrite時即時將64位浮點存儲到32位浮點數據集中,則會發生另一種轉換。
寫入數據時,可以選擇HDF5提供的本機類型,如果存儲類型有限制,則可以選擇另一種。 我從C,Fortran和Python開始使用HDF5,從此不必擔心任何這些。 (嗯,經過很長一段時間掌握了HDF5中的幾個概念)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.