Konvertieren von Dez zu Binär und Hex mit C!!
-
in Bezug auf meinen Quellcodeausschnitt ein verbesserungsvorschlag
Wenn Du hinten anfaengst kannst Du auf pow() verzichten und einfach die Basis auf den Stellenwert (initial 1) multiplizieren.
Da die Ascii-Darstellung der Hexadezimalziffern aufsteigend ist, koennte man die Ziffernumrechnung anstatt der if..else-Konstruktion zb per binaerer Suche loesen:
char hex2dec(char c) { char *hexmap="0123456789ABCDEF"; int l= 0; int r= 15; int m; while (l<r) { m= (l+r)>>1; if (c>hexmap[m]) l=m+1; else r=m; } return l; }
(setzt uppercase voraus)
-
Timauchmalloggedoff schrieb:
itoa() ist kein Standard C.
dann nimm strol, strtoul oder sowas. irgendwas davon ist 'ne standardfunktion.
-
hellihjb schrieb:
koennte man die Ziffernumrechnung anstatt der if..else-Konstruktion zb per binaerer Suche loesen:
bist du informatiker oder sowas? ein 'if' ist doch nicht schlecht:
char hex2dec(char c) { c = toupper(c) - '0'; if (c <= 9) return c; return c + '0' - 'A' + 10; }
-
~fricky schrieb:
Timauchmalloggedoff schrieb:
itoa() ist kein Standard C.
dann nimm strol, strtoul oder sowas. irgendwas davon ist 'ne standardfunktion.
Ja, aber das wären Alternativen zu atoi, nicht itoa...
-
_matze schrieb:
Ja, aber das wären Alternativen zu atoi, nicht itoa...
ach, ich blindfisch! na, dann eben 'sprintf'.
-
~fricky schrieb:
_matze schrieb:
Ja, aber das wären Alternativen zu atoi, nicht itoa...
ach, ich blindfisch! na, dann eben 'sprintf'.
Richtig, du Blindfisch!
Und wie wandelt man nach binär um mit sprintf?
-
_matze schrieb:
Richtig, du Blindfisch!
ich muss zugeben, dass ich den thread nur stückchenweise gelesen habe.
-
Ninja also bei meinem Code Beispiel war wie ich jetzt weiß diese Stelle Falsch (Denkfehler zu einfach gedacht):
dez[i] = (merk * pow(basis, stellenwert));
ich muss das Erg mit dem nächsten Addieren und dem nächsten dazu und so weiter... und dann das gesammtergebniss in dez[i] position für Postition packen...
ansonsten der Vorgang die Rechnung bis dahin ist nicht falsch...
gruß
-
noch ne Frage ... also es gibt ja isxdigit und so... damit überprüfe ich auf 0-9 A-F so nun soll bei HExa wenn ein G-Z eingegeben wurde ein Fehler kommen... gibt es sowas wie isnotxdigit oder so? ^^
-
Virokams schrieb:
noch ne Frage ... also es gibt ja isxdigit und so... gibt es sowas wie isnotxdigit oder so? ^^
lies deine frage mal selbst, dann weisst du gleich die antwort.
-
~fricky schrieb:
Virokams schrieb:
noch ne Frage ... also es gibt ja isxdigit und so... gibt es sowas wie isnotxdigit oder so? ^^
lies deine frage mal selbst, dann weisst du gleich die antwort.
!isdigit als Beispiel? XD
Ich hammel... sry