我們有一個二進制文件,表示按列排列的數據。在C++中讀取不同列具有不同數據類型的二進制數據
每列都有一個不同的數據格式,例如:
- 塔1:8個字節(unsigned long int類型)
- 塔2:4個字節(int)的
- 柱3:4個字節(浮動)
什麼是閱讀C++這些文件的最好方法,我可以做在MATLAB中,但我真的沒有什麼的怎麼做在C多的線索++
我們有一個二進制文件,表示按列排列的數據。在C++中讀取不同列具有不同數據類型的二進制數據
每列都有一個不同的數據格式,例如:
什麼是閱讀C++這些文件的最好方法,我可以做在MATLAB中,但我真的沒有什麼的怎麼做在C多的線索++
假設這些值是爲了:
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) {...}
將執行,直到沒有更多的讀取
當然,這確實假定文件中的字節的排列方式與主機體系結構中的字節相同。 –
它編譯,但在第一個filStream.read我得到一個分段錯誤。任何想法爲什麼會發生這種情況? –
更好的是,使用sizeof(dataMember0)。這樣,如果類型更改,則會讀取正確的字節數。 – namezero
我建議首先將文件轉換爲人類可讀的格式(因爲二進制格式來來去去,ASCII文本永遠保留)。 –
我不知道這是否是真的,但論點是,數據是非常大的,只是數字而已。 –
將花車轉換爲文本是一件棘手的事情。一些編譯器不會特別精確地執行此操作。 – john