2012-10-23 152 views
2

我有一個文件,其中包含多個jpegs的數據(以及一些垃圾),我需要從該文件中提取二進制文件,過濾出垃圾文件並創建jpegs。我知道jpegs的開始二進制序列。在C++中讀取文件到二進制數組中

char buffer[30]; 
ifstream fin; 
fin.open ("FILENAME.raw", ios::in | ios::binary); 
while (!fin.eof()) 
{ 
    fin.read(buffer,30); 
    cout<<buffer[2]<<endl; 
} 
fin.close(); 

這裏我試圖用二進制打印文件,但是當我運行這段代碼時,外星人字符被打印在屏幕上。

+1

也許你在你的文件中有外星人字符。二進制數據通常就是這種情況。 – john

+0

文件本身的內容是什麼? – M4rc

+6

看起來一切都很好,你沒有問題。而事實上你並沒有提出問題。 – Zane

回答

2

我認爲這裏的問題是「cout < < buffer [2]」,它將您的二進制信息轉換爲文字記錄器。之前嘗試INT投,還應該使用一個靜態的「無符號的字符數組」 因爲二進制數據可以是無符號的。那將工作:

unsigned char buffer[ 30 ]; 
ifstream fin; 
fin.open ("FILENAME.raw", ios::in | ios::binary); 
while (!fin.eof()) 
{ 

    fin.read((char*)(&buffer[0]), 30) ; 
    cout << (int)buffer[2] << " "; 
} 
fin.close(); 
return 0; 

另外如果你想遍歷二進制爲什麼你只是打印緩衝區[ 2]。

1

你應該仔細檢查文件的二進制內容,因爲你的代碼看起來非常好。