6 Stimmen

Wie man Byte für Byte aus einer Datei liest

Ich möchte die ersten 4 Bytes aus einer Binärdatei lesen, die vom Typ song.wav ist. In einer .wav-Datei müssen die ersten 4 Bytes 52-46-49-49 sein und ich muss sie später überprüfen, ob sie korrekt sind.

Das Problem ist, dass ich einen Kompilierfehler in der fread-Zeile habe, der besagt Ungültige Konvertierung von "unsigned char" zu "void" und Argument 1 der Initialisierung von 'size_t fread(void*, size_t, size_t, FILE*)' und ich weiß nicht, was das bedeutet.

Ich habe in einem vorherigen Thema gesehen, dass dies die Art und Weise ist, wie fread durchgeführt werden muss, wenn ich Byte für Byte lesen möchte. Wenn jemand eine Idee hat, wie ich Byte für Byte lesen und sie in einem Array speichern kann, wäre das großartig. Danke.

void checksong(char *argv[]){
    FILE *myfile;
    int i;
    unsigned char k[4];
    myfile=fopen(argv[2],"r");
    i=0;
    for(i=0; i<4; i++){
       fread(k[i],1,1,myfile);
    }
    for(i=0; i<4; i++){
       printf("%c\n", k[i]);
    }                                  
    return ;
}

10voto

Elazar Punkte 18442

Es ist ein einzelner Fehler:

Ungültige Umwandlung von unsigned char zu void* Initialisieren des Arguments 1 von

size_t fread(void*,size_t,size_t,FILE*)

Das bedeutet, dass k[i] ein unsigned char ist und kein Zeiger. Sie sollten &k[i] oder k+i verwenden.

Es ist jedoch nicht wirklich notwendig, Byte für Byte zu lesen. Sie können 4 Bytes lesen, keine Schleifen beteiligt:

fread(k, 4, 1, myfile);

Die Zahlen ausgeben:

for (i=0; i<4; i++)
   printf("%d\n", k[i]);

5voto

rectummelancolique Punkte 2217

Um genau ein Byte zu lesen und es in k am Index i zu speichern, müssen Sie die Adresse des Elements i angeben

for(i=0; i<4; i++){
    fread(&k[i],1,1,myfile);
}

Sie lesen jedoch lieber alle 4 Bytes auf einmal, wenn Sie an allen 4 interessiert sind. Also keine for Schleife überhaupt und einfach:

fread(k,1,4,myfile);

Es ist auch eine gute Praxis, den Rückgabecode von fread (und jeder I/O-Operation) zu testen, falls sie fehlschlägt. man fread für weitere Informationen.

4voto

Sie können einfach verwenden

char buffer[4];
fread(buffer,1,4,myfile);

0voto

Laksith Punkte 354

Sie müssen nicht fread() verwenden. Auch fgetc() funktioniert gut. Einfaches Codieren. So einfach wie das Lesen einer Textdatei.

#include 

int main(int argc, char** argv)
{
    FILE* f = fopen("lak", "rb");
    fseek(f,0,SEEK_END);
    long lsize=0,i=0;
    lsize = ftell(f);
    rewind(f);

    while(i

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X