2013-10-09 62 views
1

我們有一個二進制文件,表示按列排列的數據。在C++中讀取不同列具有不同數據類型的二進制數據

每列都有一個不同的數據格式,例如:

  • 塔1:8個字節(unsigned long int類型)
  • 塔2:4個字節(int)的
  • 柱3:4個字節(浮動)

什麼是閱讀C++這些文件的最好方法,我可以做在MATLAB中,但我真的沒有什麼的怎麼做在C多的線索++

+0

我建議首先將文件轉換爲人類可讀的格式(因爲二進制格式來來去去,ASCII文本永遠保留)。 –

+0

我不知道這是否是真的,但論點是,數據是非常大的,只是數字而已。 –

+0

將花車轉換爲文本是一件棘手的事情。一些編譯器不會特別精確地執行此操作。 – john

回答

5

假設這些值是爲了:

unsigned long int dataMember0 = 0; 
int dataMember1 = 0; 
float dataMember2 = 0.0; 

std::ifstream fileStream("file.bin", std::ios::in | std::ios::binary); 
fileStream.read((char*)&dataMember0, sizeof(unsigned long int)); 
fileStream.read((char*)&dataMember1, sizeof(int)); 
fileStream.read((char*)&dataMember2, sizeof(float)); 

施放字符指針,因爲它正被讀取作爲一個字節數組(char是一個字節)。如果你想循環這個過程:while(fileStream) {...}將執行,直到沒有更多的讀取

+3

當然,這確實假定文件中的字節的排列方式與主機體系結構中的字節相同。 –

+0

它編譯,但在第一個filStream.read我得到一個分段錯誤。任何想法爲什麼會發生這種情況? –

+1

更好的是,使用sizeof(dataMember0)。這樣,如果類型更改,則會讀取正確的字節數。 – namezero

相關問題