Char to Int



  • Hallo,
    wie kann ich ein char zu einem int konvertieren?

    Kann mir jemand ein beispiel geben?

    Hab schon gegoogled, aber atoi() braucht const char* und nicht char



  • Ein char, also ein einzelnes Zeichen? Das braucht du normalerweise nicht wirklich konvertieren. Zieh einfach 48 ab, dann machst du aus '0' eine 0, aus '1' eine 1 usw.

    char c='5';
    int i=c-48;  //i==5 !!
    


  • Was bedeutet das hier genau:

    int i=c-48;

    Also was genau passiert da nu ?



  • c wird implizit nach int gecastet und hat den Wert 53 ('5' entspricht Wert 53, Stichwort ASCII-Code!). 53-48 macht 5! Du kannst mit einem char problemlos rechnen, macht C/C++ keinen großen Unterschied zwischen char und int.



  • Hallo,

    wenn schon:

    _matze schrieb:

    char c='5';
    int i=c-48;  //i==5 !!
    

    denn schon:

    char c = '5';
    int i = c - '0';
    

    😉

    MfG,

    Probe-Nutzer



  • Die '0' macht es natürlich etwas lesbarer, da geb ich dir Recht. Aber bitte nimm diese komischen, unsichtbaren Zeichen raus, die du überall verstreut hast! 😃



  • _matze schrieb:

    Die '0' macht es natürlich etwas lesbarer, da geb ich dir Recht.

    Ich habe eben immer noch "Angst" vor Maschinen, bei denen '0' nicht auf 48 abgebildet wird 🙂 (dass die Zahlen hintereinander folgen, da habe ich keine Bedenken)

    _matze schrieb:

    Aber bitte nimm diese komischen, unsichtbaren Zeichen raus, die du überall verstreut hast! 😃

    Welche Zeichen, kläre mich mal auf! Oder jetzt besser?

    MfG,

    Probe-Nutzer



  • Probe-Nutzer schrieb:

    Welche Zeichen, kläre mich mal auf! Oder jetzt besser?

    Ähm, ich meinte die Leerzeichen. 😃



  • Hier der etwas aufwendige Code für ein InputboxBuffer[3] (von ner Inputbox das output)

    if (InputboxBuffer[1] == NULL)
        {
            einser = InputboxBuffer[0] - 48;
            return einser;
        }
    
        else if (InputboxBuffer[2] == NULL)
        {
            zehner = InputboxBuffer[0] - 48;
            einser = InputboxBuffer[1] - 48;
            ergebnis = (zehner * 10) + einser;
            return ergebnis;
        }
    
        else if (InputboxBuffer[3] == NULL)
        {
            hunderter = InputboxBuffer[0] - 48;
            zehner = InputboxBuffer[1] - 48;
            einser = InputboxBuffer[2] - 48;
            ergebnis = (hunderter * 100) + (zehner * 10) + einser;
            return ergebnis;
        }
    
        else
        {
            tausender = InputboxBuffer[0] - 48;
            hunderter = InputboxBuffer[1] - 48;
            zehner = InputboxBuffer[2] - 48;
            einser = InputboxBuffer[3] - 48;
            ergebnis = (tausender * 1000) + (hunderter * 100) + (zehner * 10) + einser;
        return ergebnis;
        }
    

    Sicher gehts noch einfacher, aber es war lustig, wieder mal Mathematisch denken zu müssen ^^



  • Schön, wenn es dir Spaß gemacht hat. 🙂 Du weißt aber, dass du dich damit auf eine Zahl <10000 festlegst, ne? Außerdem könntest du 3/4 der Zeilen sparen.



  • Wenn man es nicht selbst schreiben will:

    char s[]="12345";
      int i=atoi(s);
    

    P.S.: in_line, du hast ja nach char to int gefragt, nicht char* to int. Ist dir der Unterschied klar (char==Zeichen, char*==Zeichenkette)?


Anmelden zum Antworten