2012-04-15 12 views
0

Ich möchte aus wenigen Teilen einer Datei lesen und dann als ein unsigned char ausgeben. Dies ist eine vereinfachte Version davon:Lesen von Teilen einer Datei und Schreiben in single unsigned char

void loadPartsOfFile (const char *filename, unsigned char **output) 
{ 
    *output = malloc(333); 

    FILE *file = fopen(filename, "rb"); 
    fseek(file, 0, SEEK_SET); 
    fread(*output, 1, 111, file); 
    fseek(file, 10254, SEEK_SET); 
    fread(*output, 1, 222, file); 

    fclose(file); 
} 

Zweite fread nur überschreibt, was er zuerst Ausgabe hinzugefügt. Gibt es eine Möglichkeit, den zweiten Datenstrom an die Ausgabe anzuhängen?

Antwort

2
void loadPartsOfFile (const char *filename, unsigned char **output) 
{ 
    *output = realloc(*output, 333); 

    FILE *file = fopen(filename, "rb"); 
    fseek(file, 0, SEEK_SET); 
    fread(*output, 1, 111, file); 
    fseek(file, 10254, SEEK_SET); 
    fread(*output+111, 1, 222, file); 

    fclose(file); 
} 
+0

Vielen Dank! Übrigens gibt es eine Möglichkeit, einige Daten wie: char Daten [2] = {0xD5,0x48}; – Martin

+0

Ja, natürlich. Erhöhen Sie einfach die Größe für realloc um 2, und machen Sie einen 'memcpy (* output + some_offset, data, 2);' irgendwo. Wenn die Daten vor den anderen zwei Mitgliedern eingefügt werden, müssen diese ebenfalls nach oben verschoben werden. – wildplasser

+0

Nochmals vielen Dank. Es funktioniert perfekt. – Martin

2

Inkrementieren Sie einfach *output bis zum Ende des vorherigen gelesen, i. e. *output + 111.