Wie konvertiert man char in integer in C? [duplicate]
Lesezeit: 2 Minuten
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
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
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
14205300cookie-checkWie konvertiert man char in integer in C? [duplicate]yes
am einfachsten ist es zu tun
int x = -1; if (isdigit(c)) { x = c - 48; }
– Federico Capaldo
9. Juni 2017 um 5:37 Uhr