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 bei

    while(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.


Anmelden zum Antworten