Hallo,
Oh naja wenn das so ist. Ich habe 3 Hex-Files welche Daten
enthalten. Nun muss/möchte ich von diesen 3 Dateien jeweils
von einer bestimmten Adresse die Daten „lesen“ und dann in
einer von mir bestimmten reihenfolge in eine neue Datei an
eine von mir bestimmte adresse schreiben.
Hexfile:
0x0000 - 0x00FF = Keine Daten, prüfen ob wirklich keine Daten
0x0100 - 0x0200 = Daten, diese Daten kopieren in neue Datei
nach 0x0300
Ein „Hex“-File ist demnach eine Binärdatei, in der
Maschinenworte stehen, hier in 16bit-Blöcken. Auf
aktueller Intel-Architektur entspräche das dem Datentyp
„unsigned short int“.
Beispiel: zwei Binärdateien „bin-a.dat“ und „bin-b.dat“ lesen,
und eine binärdatei „bin-out.dat“ ausgeben (simples C,
ohne jegliche Sicherheitstests):
#include
#include
int main()
{
unsigned short \*block[3];
long blaenge[3], anzahl[3]; /\* anzahl bytes, anzahl unsigned short \*/
FILE \*finput[2], \*foutput;
finput[0] = fopen("bin-a.dat","rb");
fseek(finput[0], 0L, SEEK\_END);
blaenge[0] = ftell(finput[0]); rewind(finput[0]);
finput[1] = fopen("bin-b.dat","rb");
fseek(finput[1], 0L, SEEK\_END);
blaenge[1] = ftell(finput[1]); rewind(finput[1]);
blaenge[2] = \_\_max(blaenge[0], blaenge[1]);
block[0] = malloc(blaenge[0]+sizeof(unsigned short));
block[1] = malloc(blaenge[1]+sizeof(unsigned short));
block[2] = malloc(blaenge[2]+sizeof(unsigned short));
fread(block[0], blaenge[0], 1, finput[0]); fclose(finput[0]);
fread(block[1], blaenge[1], 1, finput[0]); fclose(finput[1]);
anzahl[0] = blaenge[0] / sizeof(unsigned short);
anzahl[1] = blaenge[1] / sizeof(unsigned short);
anzahl[2] = blaenge[2] / sizeof(unsigned short);
/\*
hier liegen in block [0] und [1] die "Hexfiles" vor,
man kann darauf zugreifen mit block[0][0] ... block[0][anzahl[0]-1 ]
und block[1][0] ... block[1][anzahl[1]-1 ]
z.B.:
if(block[0][100] == 0x00ff) {
block[3][100] = block[2][100];
}
else {
mache was anderes ...
}
die gewünschten Werte schreibt man an die entsprechenden stellen
in block[2][0] ... block[2][anzahl[2]-1 ] rein
\*/
foutput = fopen("bin-out.dat", "wb");
fwrite(block[2], blaenge[2], 1, foutput);
fclose(foutput);
/\* block[2] wird dann wieder ausgegeben \*/
free(block[0]);
free(block[1]);
free(block[2]);
return 0;
}
Ist es das? Oder noch anders?
(Hoffentlich hab ich nicht zu viele Fehler reingebastelt)
Grüße
CMБ