2016-07-27 96 views
0

我試圖讀取一個二進制文件的內容作爲一組n個字節,並將它們放在一個字符緩衝區中,並對緩衝區執行一些操作。對於下一次迭代,我必須從文件中讀取下n個字節,並將其放入緩衝區,直到文件結束。我可以使用getc(fp)和普通文本文件做同樣的事情。但是對於二進制文件,在讀取文件的全部內容之前,getc()會遇到EOF。我如何用C中的二進制文件實現它?C中的二進制文件讀取操作?

+1

你想知道C或C++嗎?請刪除不適當的標籤。 –

+0

在C中,你可以看看fread()函數 –

+0

試用fread/fwrite C.在C++中有ifstream,第二個參數是ios :: binary,據我所知。 – slavanap

回答

0

你可以閱讀使用的fread:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 

看到fread

3

兩件事情要考慮:

首先,爲了與fopen閱讀打開二進制文件時,使用模式"rb"。這會以二進制模式打開文件,因此不會對某些字符進行特殊處理。請注意,在Linux上這並不重要,但在Windows上它確實如此。

其次,請注意fgetc會將一個字符轉換爲int。這使您可以檢查EOF。如果結果不是EOF,它將是一個值從0到255的字符(假設當然是CHAR_BIT是8)。

+0

在C中,保證char在0-255的範圍內,即是無符號的? – EFenix

+1

@AntonioGarrido是的。從手冊頁:*'fgetc()'從流中讀取下一個字符,並將其作爲'unsigned char'返回到文件或錯誤末尾的'int'或'EOF' * – dbush

+2

它應該說「轉換「,而不是」施放「。 –

1

在二進制文件中,從文件中讀取的過程通常由函數fread進行。此外,如果您要將過程迭代到文件末尾。您可以使用while

while(!feof(fp)) // still not read to the end of file yet 
if (fread(buffer, sizeof(...),1,fp)==1) //put single variable to the array[] 
.... 

`