Seite 1 von 1

Bestimmten Block aus inter Hex File lesen

Verfasst: Fr Okt 03, 2014 3:23 pm
von Ostrich
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

Re: Bestimmten Block aus inter Hex File lesen

Verfasst: Fr Okt 03, 2014 3:59 pm
von cloidnerux
Hi und Willkommen im Forum :D

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

Re: Bestimmten Block aus inter Hex File lesen

Verfasst: Fr Okt 03, 2014 7:20 pm
von Ostrich
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

Re: Bestimmten Block aus inter Hex File lesen

Verfasst: Sa Okt 04, 2014 9:05 am
von Xin
Oestrich hat geschrieben:--> Kann mir jemandsagen wie ich das mache?
Wichtiger Punkt ist "ich mache", ansonsten hätten wir den Thread direkt ins Hausaufgaben-Board verschoben.

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.
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
Der Dateityp spielt dabei keine Rolle.
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.

Re: Bestimmten Block aus inter Hex File lesen

Verfasst: Sa Okt 04, 2014 9:51 am
von Ostrich
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 ?

Re: Bestimmten Block aus inter Hex File lesen

Verfasst: Sa Okt 04, 2014 11:42 am
von mfro

Re: Bestimmten Block aus inter Hex File lesen

Verfasst: Do Okt 09, 2014 11:26 pm
von Ostrich
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

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;
}
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

Re: Bestimmten Block aus inter Hex File lesen

Verfasst: Fr Okt 10, 2014 4:14 am
von mfro
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.