2012-08-08 67 views
0

大家好,同時讀取從二進制文件的二進制數據如下,我有一個問題:ifstream的讀取二進制數據的問題爲0x00字節

文件內容: D3 EE EE 00 00 01 D7 C4 D9 40

char * afpContentBlock = new char[10]; 
ifstream inputStream(sInputFile, ios::in|ios::binary); 

if (inputStream.is_open())) 
{ 
    inputStream.read(afpContentBlock, 10); 

    int n = sizeof(afpContentBlock)/sizeof(afpContentBlock[0]); // Print 4 

    // Here i would like to check every byte, but no matter how i convert the 
    // char[] afpContentBlock, it always cut at first byte 0x00. 
} 

我知道發生這種情況的原因是字節0x00。有辦法以某種方式管理它嗎? 我試圖用一個ofstream對象來寫它,並且它能夠正常工作,因爲它寫出了整個10個字節。無論如何,我想遍歷整個字節數組來檢查字節值。

非常感謝。

+3

通常的答覆「你爲什麼不使用'VECTOR'?」 (我很肯定'sizeof(afpContentBlock)/ sizeof(afpContentBlock [0])'不是7,而是4或8)。 – 2012-08-08 11:01:19

+0

我已經修復了文件內容(這是錯誤的)。一段代碼真的會有幫助和讚賞,因爲我真的還沒有使用矢量。 – 2012-08-08 12:11:54

回答

2

它很容易,只是讓你從ifstream的,像這樣多少字節閱讀:

if (inputStream.is_open())) 
{ 
    inputStream.read(afpContentBlock, 10); 
    int bytesRead = (int)inputStream.gcount(); 

    for(int i = 0; i < bytesRead; i++) 
    { 
     // check each byte however you want 
     // access with afpContentBlock[i] 
    } 
} 
+0

ifstream.read函數不返回一個int值。 – 2012-08-08 12:08:52

+0

@Duncan_McCloud你是對的,編輯來解決這個問題。過了一會兒哈哈。 – steveg89 2012-08-08 12:13:30