ich sollte bis zu vierstellige Hex-Zahlen in Dezimal-Zahlen umwandeln und umgekehrt(nicht unter Console).
Hätte vielleicht einer ne brauche Idee oder schon nen Source-Code!!
Thx im voraus
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
In diesem besonderen fall, würde statt sprintf auch strcpy, strcat bzw. sogar strcpy, strcpy gehen, wenn man unbedingt die ganze hexzahl als eine zeichenkette haben möchte.
Also mit:
char ausg[32], *eing1="08", *eing2="34";
statt:
sprintf(ausg, "%s%s", eing1, eing2);
einfach
strcpy(ausg, eing1);
strcat(ausg, eing2);
oder noch einfacher, da die zeichenkettenlängen bekannt sind:
strcpy(ausg, eing1);
strcpy(ausg+2, eing2);
Nicht dass das hier eine besondere wirkung hat, aber spaßeshalber habe ich mal geschaut, wie es um die geschwindigkeit bestellt ist und sah, dass die sprintf-variante 20 mal und die strcpy/strcat-variante immer noch zwei mal so langsam ist, wie die doppelte strcpy-variante.
Danach mit:
int ergvar;
sscanf(ausg, "%x", &ergvar);
die zahl in die variable ergvar speichern.
Dieser teil geht aber noch einfacher, in dem die zeichenketten einzeln verarbeitet werden:
int ergvar, temp;
sscanf(eing1, "%x", &temp);
sscanf(eing2, "%x", &ergvar);
ergvar+=256*temp;
Die textuelle darstellung als dezimalzahl mit sprintf sollte danach keine zauberei mehr sein:
sprintf(ausg, "%d", ergvar);
Die zeichenkette in ausg muss dann im textfeld erscheinen.
Der weg zurück erfolgt sehr ähnlich, wobei nicht "%x", sondern "%d" in sscanf verwendet wird.
sscanf(ausg, "%d", &ergvar);//mit ergvar aus dem textfeld
Die umwandlung in die zwei ein-byte hex-zeichenketten erfolgt mit z.b.:
sprintf(ausg, "%02x", (ergvar>>8) & 255);
für den ersten teil bzw.
sprintf(ausg, "%02x", ergvar & 255);
für den zweiten.
"%02x" bedeutet, dass die ausgabe hexadezimal mit (mind.) zwei stellen und führenden nullen erfolgen soll.
mr.escape