HOWTO · C
So konvertieren Sie Integer in Char in C
Erfahren Sie, wann Sie in C '0' addieren, einen Ganzzahlwert einem char zuweisen oder ein Zeichen als String formatieren sollten.
Auf dieser Seite
Wählen Sie in C die Konvertierung nach dem benötigten Ergebnis: Addieren Sie '0' zu einer einzelnen Dezimalziffer, um ihr Ziffernzeichen zu erhalten, weisen Sie einen ganzzahligen Zeichenwert einem char zu, oder verwenden Sie snprintf(), um ein einzelnes Zeichen in einen String zu schreiben. Das sind unterschiedliche Operationen. Um eine mehrstellige Ganzzahl wie 71 in den Text "71" zu verwandeln, formatieren Sie sie mit %d als Dezimaltext; die Konvertierung in ein einzelnes char kann nicht beide Ziffern aufnehmen.
Eine einzelne Dezimalziffer mit '0' in ein Zeichen konvertieren
Addieren Sie einen Wert von 0 bis 9 zum Zeichenliteral '0'. C garantiert, dass die Dezimalziffernzeichen aufeinanderfolgende Werte haben, sodass dies ohne Annahme über ASCII funktioniert. Halten Sie die Eingabe in diesem Bereich: Diese Arithmetik gilt für eine einzelne Ziffer, nicht für die Konvertierung einer ganzen Zahl in ihren Dezimalstring.
Dieses vollständige Programm konvertiert den Wert 7 in sein Ziffernzeichen und gibt es aus:
#include <stdio.h>
int main(void) {
int digit = 7;
char digit_char = (char)('0' + digit);
printf("Digit: %c\n", digit_char);
return 0;
}
Digit: 7
Für einen String, der eine mehrstellige Zahl zeigen muss, verwenden Sie eine Dezimalformatierung wie %d, statt '0' zur ganzen Zahl zu addieren.
Einen Ganzzahlwert in char konvertieren
Ein char speichert einen Zeichenwert, der in C zugleich ein Ganzzahlwert ist. Der Typ int wird üblicherweise für Ganzzahlwerte verwendet, bevor sie einem char zugewiesen werden. Eine Zuweisung konvertiert den Wert der rechten Seite in den Zieltyp; ein expliziter Cast macht diese Konvertierung sichtbar, prüft aber nicht, ob der Wert geeignet ist. Leiten Sie die Ganzzahl für ein portables Beispiel aus einem Zeichenliteral ab, statt anzunehmen, dass ein Zahlenwert wie 65 auf jedem System A darstellt. Dieses Programm zeigt beide Formen:
#include <stdio.h>
int main(void) {
int code = 'A';
char letter = code;
char cast_letter = (char)code;
printf("Assigned: %c; cast: %c\n", letter, cast_letter);
return 0;
}
Assigned: A; cast: A
Wenn die Ganzzahl als char darstellbar ist, bleibt der Wert erhalten. Ein einfaches char kann vorzeichenbehaftet oder vorzeichenlos sein. Die Konvertierung eines Werts außerhalb des Bereichs in ein vorzeichenbehaftetes char hat ein implementationsdefiniertes Ergebnis, oder es kann ein implementationsdefiniertes Signal ausgelöst werden. Die Konvertierung in unsigned char folgt den Regeln für vorzeichenlose Ganzzahlen: Das Ergebnis wird modulo UCHAR_MAX + 1 reduziert. Ein expliziter Cast validiert die Eingabe nicht und macht eine Konvertierung außerhalb des Bereichs nicht portabel. Wenn Sie einen Bytewert interpretieren müssen, verwenden Sie unsigned char und definieren Sie die Kodierung, die Ihre Daten verwenden.
Ein Zeichen mit snprintf() als String formatieren
Verwenden Sie snprintf(), wenn das Ergebnis ein nullterminierter String statt eines einzelnen char sein muss. Seine Konvertierung %c schreibt ein Zeichen; das Ziel braucht außerdem Platz für das abschließende Nullzeichen. Das Größenargument ist die Gesamtkapazität des Zielarrays. Im Gegensatz dazu formatiert %d eine Ganzzahl als Dezimaltext.
Dieses Beispiel formatiert das Zeichen A in ein Zwei-Byte-Array und gibt dann den String aus:
#include <stdio.h>
int main(void) {
char text[2];
int written = snprintf(text, sizeof text, "%c", 'A');
if (written < 0 || (size_t)written >= sizeof text) {
return 1;
}
printf("Text: %s\n", text);
return 0;
}
Text: A
snprintf() gibt die Anzahl der Zeichen zurück, die es geschrieben hätte, ohne das Nullzeichen mitzuzählen. Die Prüfung dieses Werts ermöglicht es dem Aufrufer, einen Formatierungsfehler oder ein nicht passendes Ergebnis zu erkennen. Dieses Beispiel verwendet die C99-Standardbibliotheksfunktion; kompilieren Sie es in einer Umgebung mit C99 oder neuer.
Die richtige Konvertierung wählen
- Addieren Sie für eine Dezimalziffer von 0 bis 9
'0', um das entsprechende Ziffernzeichen zu bilden. - Um einen Zeichenwert in
charzu speichern, weisen Sie einen geeigneten Ganzzahlwert zu; ein expliziter Cast ändert keine Bereichsregeln. - Um ein Zeichen als String zu speichern, verwenden Sie
snprintf()mit%cund Kapazität für sowohl das Zeichen als auch seinen Terminator. - Um eine mehrstellige Ganzzahl als Text darzustellen, verwenden Sie eine Dezimalformatierung wie
%din ein Zeichenarray.