Hexdatei-daten auslesen und in neu speichern?

Hallo Experten

Ich arbeite immernoch an meinen Hex-projekt. Nun meine neue frage:

Wie lese ich aus einem Hex-file Daten aus und kopiere diese in ein anderes Hex-file an eine andere adresse? Sprich ich möchte jede Zeile aus der Source-datei auslesen und in der Destination-datei mit einer neuen adresse speichern. Ausserdem möchte ich die Source-datei auf bestimmte speicheradressen testen ob da daten geschrieben sind oder nicht. Danke schon im voraus

Gruss Markus

Hallo

Wie lese ich aus einem Hex-file Daten aus und kopiere diese in
ein anderes Hex-file an eine andere adresse? Sprich ich möchte
jede Zeile aus der Source-datei auslesen und in der
Destination-datei mit einer neuen adresse speichern. Ausserdem
möchte ich die Source-datei auf bestimmte speicheradressen
testen ob da daten geschrieben sind oder nicht. Danke schon im
voraus

Das Problem ist, dass Du das Problem nicht verstanden hast,
was Du lösen möchtest. Daher fehlen Dir auch die Worte,
dieses verständlich zu beschreiben.

Mach mal folgendes: Schreib mal „konkret“, was genau
und wo Du was machen möchtest – und nicht wie Du
glaubst, wie Du es „programmierermässig“ ausdrücken müsstest :wink:

Grüße

CMБ

Hallo Markus,

Wie lese ich aus einem Hex-file Daten aus und kopiere diese in
ein anderes Hex-file an eine andere adresse?

Was ist bei dir ein Hex-File ??

Falls es sich um eine ASCII-datei handelt wird sie am eheseten im Intel- oder Motorola-Hex-Format abgelegt sein. Allerdings gibt es auch noch ein paar exotische Formate.

Oder ist das ganze eine Binär-Datei, da gibt es dann auch noch mehrere Möglichkeiten.

MfG Peter(TOO)

Hallo

Wie lese ich aus einem Hex-file Daten aus und kopiere diese in
ein anderes Hex-file an eine andere adresse? Sprich ich möchte
jede Zeile aus der Source-datei auslesen und in der
Destination-datei mit einer neuen adresse speichern. Ausserdem
möchte ich die Source-datei auf bestimmte speicheradressen
testen ob da daten geschrieben sind oder nicht. Danke schon im
voraus

Das Problem ist, dass Du das Problem nicht verstanden hast,
was Du lösen möchtest. Daher fehlen Dir auch die Worte,
dieses verständlich zu beschreiben.

Mach mal folgendes: Schreib mal „konkret“, was genau
und wo Du was machen möchtest – und nicht wie Du
glaubst, wie Du es „programmierermässig“ ausdrücken müsstest
:wink:

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

Ist das verständlich? Hoffe du kannst mir helfen…

Gruss und danke

Markus

Hallo Markus,

Wie lese ich aus einem Hex-file Daten aus und kopiere diese in
ein anderes Hex-file an eine andere adresse?

Was ist bei dir ein Hex-File ??

Falls es sich um eine ASCII-datei handelt wird sie am eheseten
im Intel- oder Motorola-Hex-Format abgelegt sein. Allerdings
gibt es auch noch ein paar exotische Formate.

Oder ist das ganze eine Binär-Datei, da gibt es dann auch noch
mehrere Möglichkeiten.

Soweit ich das verstanden hab ist es ein Intel-Hex-Format.

Danke schonmal ich hoffe du kannst mir noch weiterhelfen…

Gruss Markus

Hallo Markus,

Soweit ich das verstanden hab ist es ein Intel-Hex-Format.

Danke schonmal ich hoffe du kannst mir noch weiterhelfen…

http://www.goblack.de/desy/mc8051chip/ide8051/d51Tx_…
http://www.cs.net/lucid/intel.htm

MfG Peter(TOO)

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Б