簡體   English   中英

HDF5:是否需要顯式設置字節順序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM