Source Code von itoa



  • Hey Leute,

    hat jemand den Source Code von itoa? Ich weiß, der ist von Compiler zu Compiler unterschiedlich, aber ich brauche einen, der GENAUSO funktioniert (also die 3 Parameter value, string und radix). Die Funktion soll neben Hex am besten auch Binär umrechnen können, so wie das „Original”. Google liefert mir nur nicht funktionierende bzw. anders funktionierende Codes bzw. Compilerabhängige Codes.

    Danke schonmal im Vorraus!

    LG



  • Geil! 😃

    v o r a u s 😃


  • Administrator

    Zwei Fragen:
    1. Willst du es in C oder C++? itoa wird normalerweise in C verwendet, dann wärst du auch im falschen Forum.
    2. Wieso willst du diesen Code? Was reicht dir an den Standardmitteln nicht? http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html

    Und schön fand ich irgendwie dies hier:
    Du weisst, dass die Originale von Compiler zu Compiler unterschiedlich funktionieren, bist aber nicht mit den Ergebnissen von Google zufrieden, weil es dir compilerabhängige Codes liefert? 🤡

    Grüssli



  • Also sagen wirs so, ich hab ein Projekt, was ich in C++ schreibe, wovon aber einige Teile in C geschrieben sind. U. a. dieser Teil.
    Die Standardmittel wie sprintf sind einfach viel zu langsam und gehen stark auf die Ressourcen.

    Ja xD

    Ich glaub ich geh dann mal im C Forum fragen 😉 Oder kann jemand das verschieben, oder soll ich ganz in nem anderen Forum fragen?



  • I To A schrieb:

    Hey Leute,

    hat jemand den Source Code von itoa? Ich weiß, der ist von Compiler zu Compiler unterschiedlich, aber ich brauche einen, der GENAUSO funktioniert (also die 3 Parameter value, string und radix).

    So?:

    #include <cassert>
    
    namespace itoa_detail
    {
        char to_ascii( int digit )
        {
            if( digit > 9 )
                return char(digit - 10 + 'a');
            return char(digit + '0');
        }
    
        template< typename Out >
        Out to_digits( int value, Out out, int radix )
        {
            assert( value >= 0 );
            const int digit = value % radix;
            value /= radix;
            if( value > 0 ) out = to_digits( value, out, radix );
            *out++ = to_ascii( digit );
            return out;
        }
    }
    
    char* itoa( int value, char* buf, unsigned radix )
    {
        assert( radix > 1 );
        if( value < 0 ) { // negativ
            *buf++ = '-';
            value = -value;
        }
        buf = itoa_detail::to_digits( value, buf, radix );
        *buf++ = '\0';
        return buf;
    }
    
    int main()
    {
        char dst[5];
        int i = -117;
        itoa( i, dst, 2 );
    
        return 0;
    }
    

    I To A schrieb:

    Also sagen wirs so, ich hab ein Projekt, was ich in C++ schreibe, wovon aber einige Teile in C geschrieben sind. U. a. dieser Teil.
    Die Standardmittel wie sprintf sind einfach viel zu langsam und gehen stark auf die Ressourcen.

    Bist Du sicher, dass es an 'sprintf' liegt? Wie oft wird das denn aufgerufen und was passiert anschließend mit den strings? Der Code oben ist aber kein Deut schneller als das itoa Deines Compilers.



  • Code fuer Ein- und Ausgabe muss nicht schnell sein. Den Flaschenhals bilden die Ein- und Ausgabegeraete wie Festplatte, Terminal oder Netzwerk.



  • Werner_logoff schrieb:

    Bist Du sicher, dass es an 'sprintf' liegt? Wie oft wird das denn aufgerufen und was passiert anschließend mit den strings? Der Code oben ist aber kein Deut schneller als das itoa Deines Compilers.

    Ich habe im Internet nach Alternativen gegoogelt, und immer wieder zu lesen bekommen, das sprintf() und Ähnliches viel langsamer ist. Da es so häufig vorkam, hatte ich eig. keine Zweifel daran. Aber ich lass mich natürlich gerne belehren.

    Mein Compiler kann kein itoa, dass ist ja das Problem 😉

    Aber mittlerweile denke, ich dass ich etwas übertreibe, was Geschwindigkeit angeht 😉

    Danke für deinen Code, er funktioniert super! 👍

    LG


Anmelden zum Antworten