Hallo
ich habe eine Datei im Intel.Hex Format.
hierraus möchte ich einen besimmten 8 Byte langen Block lesen.
z.B. den Block von Adresse $210 - $218
diese 8 Byte sollen jeweils in eine Variable als Hex gespeichert werden. oder alt in ein Array. Denn ich möchte Sie weiter verarbeiten
Das ganze soll in C passieren
P.S.: Als erweiterung möchte ich auch ein bestimmten teil aus einer Datei lesen, die nicht im intel.hex Format ist, sondern schon als Binärdatei umgewandelt ist
Danke
Bestimmten Block aus inter Hex File lesen
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Bestimmten Block aus inter Hex File lesen
Hi und Willkommen im Forum
Du stellst leider keine Frage, daher kann ich dir auch keine Antwort geben.
Sofern du dich noch nicht mit dem programmieren in C auskennst, sollte das der beste Startpunkt sein: http://www.proggen.org/doku.php?id=c:start
Gruß
cloidnerux

Du stellst leider keine Frage, daher kann ich dir auch keine Antwort geben.
Sofern du dich noch nicht mit dem programmieren in C auskennst, sollte das der beste Startpunkt sein: http://www.proggen.org/doku.php?id=c:start
Gruß
cloidnerux
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: Bestimmten Block aus inter Hex File lesen
Naja ich hab doch geschrieben, was ich vor habe.
jetzt die Frage
--> Kann mir jemandsagen wie ich das mache?
- Wer die Frage noch genauer brauche. wie kann ich in einem HEX-File die genaue Adresse definieren und die Länge des Strings den ich dann auslese um ihn weiter zu verarbeiten.
- 2.Teil wie mache ich das gleiche in einer Binärdatei
Danke
jetzt die Frage
--> Kann mir jemandsagen wie ich das mache?
- Wer die Frage noch genauer brauche. wie kann ich in einem HEX-File die genaue Adresse definieren und die Länge des Strings den ich dann auslese um ihn weiter zu verarbeiten.
- 2.Teil wie mache ich das gleiche in einer Binärdatei
Danke
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Bestimmten Block aus inter Hex File lesen
Wichtiger Punkt ist "ich mache", ansonsten hätten wir den Thread direkt ins Hausaufgaben-Board verschoben.Oestrich hat geschrieben:--> Kann mir jemandsagen wie ich das mache?
Ich gehe mal davon aus, dass rudimentäre Grundkenntnisse in C da sind, ansonsten folge bitte cloidnerux Link.
Bitte schau Dir die Funktionen fopen(), fread() und zur Positionierung fseek() an.
Wenn Du ein Binärfile öffnest, musst Du (zumindest unter Windows) den Modus "r+b" nehmen, Du positionierst Dich mit fseek in der Datei und lädst dann mit fread die Daten.
Der Dateityp spielt dabei keine Rolle.Oestrich hat geschrieben:- Wer die Frage noch genauer brauche. wie kann ich in einem HEX-File die genaue Adresse definieren und die Länge des Strings den ich dann auslese um ihn weiter zu verarbeiten.
- 2.Teil wie mache ich das gleiche in einer Binärdatei
Die Position wird immer in Byte ab Beginn der Datei gesetzt (SEEK_SET).
Am Ende eines Strings folgt in der Regel die 0. Du kannst also einen Block einlesen und gucken, ob Du eine 0 findet oder ob das alles zum String gehört.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Bestimmten Block aus inter Hex File lesen
Hallo
Ja Kenntnisse sind vorhanden. Mit fseek hab ich auch schon gearbeitet. Allerdings lässt sich in einem hex file ja nicht Byte für Byte suchender springen. Ich müsste es erst in ein bin file formatieren.
Ich hatte gehofft es gibt eine Funktion die direkt einen gewünschten Block auslesen kann
Also muss ich das wohl doch eher händisch machen oder ?
Ja Kenntnisse sind vorhanden. Mit fseek hab ich auch schon gearbeitet. Allerdings lässt sich in einem hex file ja nicht Byte für Byte suchender springen. Ich müsste es erst in ein bin file formatieren.
Ich hatte gehofft es gibt eine Funktion die direkt einen gewünschten Block auslesen kann
Also muss ich das wohl doch eher händisch machen oder ?
Re: Bestimmten Block aus inter Hex File lesen
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
Re: Bestimmten Block aus inter Hex File lesen
Hallo
Also ich habe es mir jetzt etwas einfacher gemacht.
Anstatt das HEx in Bin zu wandeln, habe ich ein Tool gefunden was das macht. dies nutze ich jetzt.
Aber ich habe ein paar Probleme aus meinem Bin File die zeichen richtig zu lesen.
hier mein Code
Hier der Anfang meines Hex:
80 14 05 58 00 91 FC 00 FF 59 92 AC 00 91 FC 00 AF 09
Ih bekomme imemr als Ausgabe '28ff1b' und '28ff19'
Wenn ich meine Varioablen a, b nciht als Array definiere geht es.
alelrdings hate ich dann das Problem, das ich, wenn er z.B. Byte2 (= 05) aus ließt ließt er nur die 5. ist ja auch ok, aber wenn ich die werte wieder irgendwo in eine datei schreiben will, schreibt er halt nur 5 und nicht 05
Und dazu kommt ja, das ich eigentlich das Array byte für byte shreiben wollte.
z.B.
a[0] = 80
a[1] = 14
a[2] = 05
a[3] = 58
Hate jemand ne kleine hilfe parrat
Also ich habe es mir jetzt etwas einfacher gemacht.
Anstatt das HEx in Bin zu wandeln, habe ich ein Tool gefunden was das macht. dies nutze ich jetzt.
Aber ich habe ein paar Probleme aus meinem Bin File die zeichen richtig zu lesen.
hier mein Code
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[1];
char b[2];
FILE * Filespeicher;
Filespeicher = fopen ("test.bin", "rb");
if (Filespeicher == NULL)
{printf("ERROR. Can't find/open the test.bin File.\n");
return EXIT_FAILURE;}
fseek (Filespeicher,4, SEEK_SET);
fread( &a, 1, 1, Filespeicher );
fread( &b, 1, 1, Filespeicher );
printf( "Hexwerte in der Datei: '%x' und '%x'\n", a ,b );
fclose (Filespeicher);
return 0;
}
80 14 05 58 00 91 FC 00 FF 59 92 AC 00 91 FC 00 AF 09
Ih bekomme imemr als Ausgabe '28ff1b' und '28ff19'
Wenn ich meine Varioablen a, b nciht als Array definiere geht es.
alelrdings hate ich dann das Problem, das ich, wenn er z.B. Byte2 (= 05) aus ließt ließt er nur die 5. ist ja auch ok, aber wenn ich die werte wieder irgendwo in eine datei schreiben will, schreibt er halt nur 5 und nicht 05
Und dazu kommt ja, das ich eigentlich das Array byte für byte shreiben wollte.
z.B.
a[0] = 80
a[1] = 14
a[2] = 05
a[3] = 58
Hate jemand ne kleine hilfe parrat
Re: Bestimmten Block aus inter Hex File lesen
Ostrich hat geschrieben:...Code: Alles auswählen
... char a[1]; char b[2]; ... fread( &a, 1, 1, Filespeicher ); fread( &b, 1, 1, Filespeicher ); ... printf( "Hexwerte in der Datei: '%x' und '%x'\n", a ,b );
Wenn ich meine Varioablen a, b nciht als Array definiere geht es.
....
Hate jemand ne kleine hilfe parrat
Ja. Mach' dir klar, wie Arrays in C repräsentiert werden - eine Array-Variable ist nichts anderes als ein Zeiger auf ihr erstes Element.
Dann verstehst Du auch, warum das nicht funktionieren kann: wenn Du von diesem Zeiger die Adresse bestimmst und fread() dorthin lesen läßt, hast Du den Zeiger selbst überschrieben statt den Speicherbereich, auf den er zeigt. Ab da kommt nur noch Müll raus. Bring' das in Ordnung, dann müsste das Einlesen schon mal funktionieren.
Wenn Du die selbe Überlegung beim Ausgeben noch mal anwendest, wirst Du erkennen, daß Du dort denselben Fehler gemacht hast.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.