Hexwerte verketten und in Dezimalwert umwandeln
-
Folgender Sachverhalt:
Ich habe eine Textdatei die ich einlese, mit getc().
Bsp.: (Hex-werte)00 00 04 26 95
Nun möchte ich aber die Werte bis 95 als "große" Zahl haben, also 426.
Da ich aber vorher nicht weis ob in der Textdatei die ersten 2 Bytes auch Werte ungleich 0 sind, müsste ich ja die Zeichen einlesen,
und nur mit einander verketten wenn der Wert ungleich 0 ist ( - solange noch kein anderer Wert als 0 aufgetreten ist - ).Nachdem ich das bis zur 95 gemacht habe, möchte ich die so entstandene "große"
Zahl noch umwandeln, da sie einen Hex-Wert entspricht.Meine Idee wäre gewesen, ein char Array anzulegen und die Werte dort einzutragen.
Aber dann hört es schon auf, da ich nicht weis wie ich dann die Zahl zusammensetzen soll.Wie kann man das am besten bewerkstelligen??
mfg rendner
-
fscanf?
-
Damit könnte ich aber auch nur die einzelnen Bytes auf verschiedene Integer Verteilen.
Da bleibt immer noch mein kleines Problem, dass ich davon nicht meine zusammen gesetzte Zahl habe.Oder gibt es da dann eine einfache Möglichkeit dies zu erledigen.
mfg rendner
-
wie hasst du 426 berechnet?
-
Verkettet im Sinne von Strings.
Wenn in Datei folgendes steht:00 10 04 2E 95
Soll dann 10042E herauskommen, was wiederum dezimal 1049646 entspricht.
Wie das im endeffeckt abläuft ist mir eigentlich egal, mir kommt es dann nur auf den richtigen dezimalwert an.
mfg rendner
-
#include <stdio.h> #include <stdbool.h> bool readnum( FILE* fp, int* ziel ) { int gesamt; int einzel; // lesen bis non-null einzel = 0; for (;;) { if ( fscanf( fp, "%x", &einzel ) != 1 ) return false; // keine Daten wenn != 1 if ( einzel != 0 ) break; // Abbruch wenn Einzelwert != 0 } // Rest lesen gesamt = einzel; for (;;) { if ( fscanf( fp, "%x", &einzel ) != 1 ) break; // Abbruch, wenn keine weiteren Daten vorhanden gesamt = gesamt * 256 + einzel; // ansonsten Gesamtergebnis um 8 Bit nach links schieben und neuen Einzelwert aufaddieren } *ziel = gesamt; return true; }
-
uiui, das gibt bestimmt wieder nen schönen flame um deinen code.
-
Super vielen Dank, funktioniert einwandfrei...
mfg rendner