Nummer in String möglichst schnell schreiben
-
Dass du dich traust, so ein Gewusel zu veröffentlichen ...
Ne, bei mir erreicht der Code nur 450 Cycles. Das ist zwar immer noch schneller als die erste Routine, aber kommt an mein letztes Ergebnis (200 Cycles) nicht ran.
-
Dachstuhl schrieb:
Dass du dich traust, so ein Gewusel zu veröffentlichen ...
Dachstuhl schrieb:
Ne, bei mir erreicht der Code nur 450 Cycles.
Welche Testwerte nimmst du?
-
**xxx[write_number_reverse(xxx,8,12345678LU)]=0;
Da solltest du aber aufpassen, dass du '\0' nicht in undefinierten Speicher schreibst, weil dein xxx evtl. nicht ausreicht.
Ich würde auch beiwhile(rvalue && end);
auf end verzichten, und lieber zuvor sinnvolle Größen mittels assert absichern, denn size_t sollte nicht mehr als 20 Dezimalstellen benötigen.
Auch kannst du dir den ganzen Shift-Kram sparen, indem du den Beginnstring zurückgibst und im aufrufenden Kontext einfach wiederverwendest.const char *write_number_reverse(char*string,size_t string_max,size_t value) { static const char dezimal[]="0123456789"; char *p=string+string_max; assert(string_max>20); *--p=0; /* Stringende absichern */ do *--p=dezimal[value%10]; while(value/=10); return p; }
Aufrufen dann einfach mit:
char s[30]; puts( write_number_reverse(s,30,1234567890LU) );
-
@Wutz: Genau dasselbe hatte ich auch schon in der ersten Antwort gepostet, nur nicht nullterminiert.