G
condor schrieb:
Ich habe es nun aber so gelöst:
unsigned long zahl = 1234567890;
unsigned short intLen = 0;
while (potenzieren(10, intLen)<zahl) intLen++;
char str[11];
for (i=0; i<intLen; i++) str[i] = (zahl % potenzieren(10, intLen-i)) / potenzieren(10, intLen-1-i) + 48;
str[intLen] = '\0';
Funktioniert wunderbar.
Wers mag. Ich denke trotzdem, du solltest das nochmal überarbeiten. Wenn du das nur ein paar mal während der Laufzeit brauchst, ist es unerheblich. Aber zB für Parser, die exzessiven Gebrauch von solchen Sachen machen, ist es ziemlicher Overkill. Um es mal ein wenig bildlich darzustellen - das was du da machst, ist wie wenn jemand versucht in den 5 km entfernten Nachbarort zu gelangen, aber anstatt den direkten Weg zu nehmen, umrundet er die Erde einmal in entgegengestzte Richtung. Sicher, er kommt an, nur wirklich sinnvoll ist das nicht.
nochwas:
Statt den ASCII Codes solltest du Zeichen Literale verwenden (zB '0' statt 48). Das macht den Code verständlicher. Zudem ist str[11] etwas unterdimensioniert, für 32 bit unsigned longs mag das ausreichen, aber wenn long grösser ist, kann das schnell zu Buffer-Overflows führen.