Wie konvertiert man char in integer in C? [duplicate]

Lesezeit: 2 Minuten

Benutzeravatar von Cute
Süß

Mögliche Duplikate:

So konvertieren Sie ein einzelnes Zeichen in ein Int
Zeichen in Ganzzahl in C

Kann mir jemand sagen, wie man a konvertiert char zu int?

char c[]={'1',':','3'};

int i=int(c[0]);

printf("%d",i);

Wenn ich das versuche, gibt es 49.

  • am einfachsten ist es zu tun int x = -1; if (isdigit(c)) { x = c - 48; }

    – Federico Capaldo

    9. Juni 2017 um 5:37 Uhr

Benutzeravatar von Paul Tomblin
Paul Tomblin

Früher, als wir davon ausgehen konnten, dass die meisten Computer ASCII verwendeten, taten wir das einfach

int i = c[0] - '0';

Aber in diesen Tagen von Unicode ist das keine gute Idee. Es war nie eine gute Idee, wenn Ihr Code auf einem Nicht-ASCII-Computer ausgeführt werden musste.

Bearbeiten: Obwohl es hackish aussieht, ist es offensichtlich ist garantiert durch den Standard zu arbeiten. Danke @Ohwicker.

  • Funktioniert nicht. Ich erwarte eine Antwort als 1, aber es gibt einen 6-stelligen Zahlenmüll, denke ich

    – Süß

    15. Mai 2009 um 13:05 Uhr

  • Entschuldigung, ich habe es in c geändert[0] denn das ist es, was der Beispielcode verwendet.

    – Paul Tomblin

    15. Mai 2009 um 13:12 Uhr

  • Wie könnte Unicode die Darstellung einer Ziffer in einer char-Variablen beeinflussen?

    – David Syke

    15. Mai 2009 um 14:49 Uhr

  • @David, wahrscheinlich hast du recht. Ich dachte nur, dass es im Unicode-Zeichensatz Dinge geben könnte, die wie Ziffern aussehen, es aber nicht sind. Aber wirklich, das Problem sind andere Zeichensätze, da der Standard nicht garantiert, dass 0-9 zusammenhängende ganzzahlige Werte sind.

    – Paul Tomblin

    15. Mai 2009 um 15:18 Uhr

  • @Paul, eigentlich garantiert der C-Standard das. Absatz 2.2.1 „Sowohl im Quell- als auch im Ausführungsbasiszeichensatz muss der Wert jedes Zeichens nach 0 in der obigen Liste von Dezimalziffern um eins größer sein als der Wert des vorherigen.“ Ihre Antwort ist also in einer konformen C-Implementierung vollkommen gültig.

    – Daniel Earwicker

    27. Mai 2009 um 8:43 Uhr

Benutzeravatar von Frans Bouma
Frans Bouma

Die Standardfunktion atoi() wird wahrscheinlich tun, was Sie wollen.

Ein einfaches Beispiel mit “atoi”:

#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    int useconds = atoi(argv[1]); 
    usleep(useconds);
}

  • atoi nimmt ein char*, kein char.

    – mmx

    15. Mai 2009 um 12:51 Uhr

  • Ist das nicht nur Semantik? Ein Zeichen* ergibt auch ein Zeichen, übergeben Sie einfach die Adresse. Aber ok, ich habe mir die Einzelheiten nicht angesehen, mein C fängt an, etwas einzurosten.

    – Frans Bouma

    15. Mai 2009 um 12:53 Uhr

  • Wenn Sie &c an etwas übergeben, das einen nullterminierten String erwartet, werden Sie in einer Welt voller Schmerzen sein.

    – Paul Tomblin

    15. Mai 2009 um 12:54 Uhr

  • Nein, um richtig zu sein, es erwartet ein NULL-terminiertes char*, nicht nur eine Adresse.

    – mmx

    15. Mai 2009 um 12:54 Uhr

  • @Frans,Noldorin: Ich würde es für sehr gefährlich halten, “nur” einen Zeiger auf ein char-Array zu übergeben, das nicht NULL-terminiert ist, an eine Funktion, die eine NULL-terminierte Zeichenfolge erwartet. Entfernen Sie im Beispiel den Doppelpunkt aus dem char-Array und der Code liest den nicht initialisierten Speicher.

    – Tobi

    15. Mai 2009 um 12:59 Uhr

1420530cookie-checkWie konvertiert man char in integer in C? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy