Strings spalten und ordnen, wie???

Gast #198872
Lesenswert?

Hallo!

Ich muss mit C++ Hex-Werte aus einer Datei einlesen und in
Dezimalzahlen umwandeln. Die Struktur der Werte sieht so aus:

32 0F 0B 0F 0A 0F 0D 0F 0E 0F 0D 0F 0D 0F 0C 0F
0D 0F 0D 0F FF FF FF FF FF FF FF FF FF FF FF FF

dabei bilden immer zwei Paare einen Zahlenwert. Also z.B. -> "32 0F"

Allerdings ist "32 0F" noch byteweise verdreht. Der richtige Wert
müsste "0F 32" sein. Also umgedreht. Hat jemand von euch eine Idee
wie ich die Hex-Werte in c++ umdrehen kann und in Dezimalzahlen
umwandeln kann?? Vielleicht kann mir einer eine hilfreiche Funktion
nennen, nach der ich mal suchen kann?

Danke und bis später sagt der Peter.
Gast #198875
Lesenswert?

CString zeichenkette = "";
CFile file;
zeichenkette += file.Read (...);

Dann hast du den Inhalt der Datei in der zeichenkette stehen (wie groß
ist diese ungefähr?).
Den String kannst du dann mit beliebigen Stringfunktionen bearbeiten
bzw. auf ihn analog zu einem Array mittels zeichenkette [i] zugreifen.

Oder wie würdest du es machen wollen?
Gast #198877
Lesenswert?

Ist denn Deine Datei eine ASCII-Repräsentation eines Hexdumps, oder hast
Du zur Verdeutlichung eine Binärdatei als Hexdump dargestellt?

In letzterem Falle: Datei in WORD-Array (unsigned short) einlesen,
fertig.
Gast #198878
Lesenswert?

Hallo...

habs jetzt wie folgt gelöst:

// einlesen bis end-of-file
while(ch!=EOF){
         if(ch>='0' && ch<='9'){
                 result[i++]=ch-'0';
                 cout << result[i-1] << ' ';
         }else if (ch>='A' && ch<='F'){
                 result[i++]=ch-'A'+10;
                 cout << result[i-1] << ' ';
         }
         ch = getc(fp);
     }//while

// ausgabe als Integer-Werte
for(i=0; i<length-1; i+=4){
         tmp =
(result[i+2]<<12)+(result[i+3]<<8)+(result[i]<<4)+result[i+1];
         cout << tmp << " ";
         fprintf(fp2, "%i\n", tmp);
         k++;
     }//for


nochmals Danke für eure Hilfe...

Gruss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren