Integer -> Char -> ASCII



  • kleines Beispiel:

    int main()
    {
        char tmp[11];
        int i = 9;
        unsigned int a = 4114711471;
    
        tmp[10] = 0;
    
        do{
            tmp[i--] = (a%10)+48 ;
    
        } while (a/=10);
    
        // tmp+i = Anfangsadresse des Strings
    }
    

    😉



  • tmp+i+1 == Anfangsadresse des Strings



  • mikey schrieb:

    Musst du das von Hand schreiben können? Ansonsten gibt es die Funktion itoa () 😉

    Welches nicht Standard-C ist.



  • balduin schrieb:

    kleines Beispiel:

    a/=10
    

    sehr schön, vielen lieben dank! Das hab ich gesucht 🙂 Mich wundert das aber, da wir aber normal keine Bsp zum Üben bekommen, die Befehle brauchen die wir nicht kennen. Aber ne andere Lösung scheint es ja nicht zu geben.

    🙂 Schöne Feiertage

    Update:

    Oh hehe... tut mir Leid, bin noch etwas sehr unerfahren 🙂 Also mit nur "/" anstelle von "/=" würd es ja auch gehen - ganze vergessen - es ist ja ein Int...

    Was macht denn genau /= ?



  • a /= 10
    

    ist das selbe wie

    a = a / 10
    

    Gruß
    zeigerzeiger



  • Nur mit / würde es vermutlich nicht gehen - x/=n; ist eine Abkürzung für x=x/n; (das gibt's auch für etwa ein Dutzend weitere binäre Operatoren)



  • Oder die rekursive Variante:

    void printd(unsigned long n) {
        unsigned long i;
        if (i = n / 10)
            printd(i);
        putchar(n % 10 + '0');
    }
    

    '0' ist meistens 48, aber es muss ja nicht sein.



  • Noch ne kurze Zwischenfrage da ich das so noch nie angewendet habe.

    Foglendes Coding:

    if (i = n / 10)
    
    while (a/=10)
    

    Aus welchem logischen Ansatz sind die Bedingungen denn wahr bzw. unwahr.
    Bei Division werden doch nie "-" Werte erreicht, die dann nicht in einen unsigned int/long passen würden.

    Wie wird also hier entschieden ob die IF bzw. WHILE Bedingung wahr ist?

    Danke 🙂



  • codefrag schrieb:

    Wie wird also hier entschieden ob die IF bzw. WHILE Bedingung wahr ist?
    Danke 🙂

    do{
    
            tmp[i--] = (a%10)+'0';
    
        } while (a/=10);
    

    a wird in der do-while Schleife nach jeder Division durch 10 kleiner (Ergebnis wird sofort zugewiesen und ausgewertet)
    ist das Ergebnis der Division kleiner als 1 wird a == 0 (false),(weil unsigned int keine Nachkommastellen hat) und die Schleife
    wird beendet.
    mfg



  • Ragdar schrieb:

    - ganze vergessen - es ist ja ein Int...

    kann man berücksichtigen:

    int main()
    {
        char tmp[12];
        int i = 10;
        int a = -2064345332;
        char vorzeichen = 0;
    
        tmp[11] = 0;
    
        if (a < 0)
        {
            a = -a;
            vorzeichen = '-';
        }
    
        do{
    
            tmp[i--] = (a%10)+'0';
    
        } while (a/=10);
    
        if (vorzeichen)
            tmp[i--] = vorzeichen;
        // tmp+i+1 == Anfangsadresse des Strings
    }
    

    mfg



  • balduin schrieb:

    a wird in der do-while Schleife nach jeder Division durch 10 kleiner (Ergebnis wird sofort zugewiesen und ausgewertet) ist das Ergebnis der Division kleiner als 1 wird a == 0 (false),(weil unsigned int keine Nachkommastellen hat) und die Schleife wird beendet.

    Alles klar. Da laut Defintion FALSE = 0 ist ... dann isses logisch 🙂

    Danke 👍


Anmelden zum Antworten