2016-07-27 26 views
0

Ich versuche, den Inhalt einer Binärdatei als eine Gruppe von N Bytes jedes Mal zu lesen und sie in einem Zeichenpuffer zu platzieren und einige Operationen auf dem Puffer auszuführen. Für die nächste Iteration muss ich die nächsten n Bytes aus der Datei lesen und sie bis zum Ende der Datei im Puffer ablegen. Ich kann das gleiche mit getc (fp) mit normalen Textdateien tun. Bei binären Dateien wird getc() jedoch mit EOF konfrontiert, bevor der gesamte Inhalt der Datei gelesen wird. Wie kann ich es mit Binärdatei in C erreichen?Binärdatei Leseoperationen in C?

+1

Möchten Sie für C oder für C++ wissen? Bitte entfernen Sie das unpassende Tag. –

+0

In C können Sie sich die fread() Funktion ansehen –

+0

versuchen Sie fread/fwrite in C. In C++ gibt es ifstream, mit dem zweiten Parameter ios :: binary, soweit ich mich erinnere. – slavanap

Antwort

0

Sie lesen fread verwenden, können:

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

siehe fread

3

Zwei Dinge zu beachten:

Zuerst wird, wenn mit fopen zum Lesen Verwendung Modus "rb" eine binäre Datei zu öffnen. Dies öffnet die Datei im Binärmodus und gibt daher bestimmten Zeichen keine spezielle Behandlung. Beachten Sie, dass dies unter Linux nicht wichtig ist, aber unter Windows.

Zweitens, bedenken Sie, dass ein Zeichen zurückgibt, das an eine int Caste geschrieben wurde. So können Sie nach EOF suchen. Wenn das Ergebnis nicht EOF ist, ist ein Zeichen ein Wert von 0 bis 255 (vorausgesetzt, CHAR_BIT ist 8).

+0

In C, ist garantiert, dass char im Bereich 0-255 ist, das heißt, ist vorzeichenlos? – EFenix

+1

@AntonioGarrido Ja. Von der man-Seite: * 'fgetc()' liest das nächste Zeichen aus dem Stream und gibt es als 'nicht signiertes Char'-Cast in ein 'int' zurück, oder' EOF' am Ende der Datei oder Fehler * – dbush

+2

Es sollte "konvertiert" lauten ", nicht" gegossen ". –

1

In Binärdateien wird der Prozess zum Lesen von Dateien in der Regel von der Funktion fread durchgeführt. Darüber hinaus, wenn Sie den Prozess bis zum Ende der Datei durchlaufen möchten. Sie können 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[] 
.... 

`

verwenden.