HOWTO · C
Comment convertir un nombre entier en caractère en C
Apprenez quand ajouter '0', affecter une valeur entière à un char ou formater un caractère sous forme de chaîne en C.
Sur cette page
En C, choisissez la conversion selon le résultat dont vous avez besoin : ajoutez '0' à un seul chiffre décimal pour obtenir son caractère de chiffre, affectez une valeur entière de caractère à un char, ou utilisez snprintf() pour placer un caractère dans une chaîne. Ce sont des opérations différentes. Pour transformer un entier à plusieurs chiffres tel que 71 en le texte "71", formatez-le en texte décimal avec %d ; le convertir en un seul char ne peut pas contenir les deux chiffres.
Convertir un seul chiffre décimal en caractère avec '0'
Pour une valeur de 0 à 9, ajoutez-la au littéral de caractère '0'. C garantit que les caractères des chiffres décimaux ont des valeurs consécutives, donc cela fonctionne sans supposer l’ASCII. Gardez l’entrée dans cette plage : cette arithmétique vaut pour un seul chiffre, et non pour convertir un entier entier en sa chaîne décimale.
Ce programme complet convertit la valeur 7 en son caractère de chiffre et l’affiche :
#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
Pour une chaîne qui doit afficher un nombre à plusieurs chiffres, utilisez un formatage décimal tel que %d au lieu d’ajouter '0' au nombre entier.
Convertir une valeur entière en char
Un char stocke une valeur de caractère, qui est également une valeur entière en C. Le type int est couramment utilisé pour les valeurs entières avant leur affectation à un char. Une affectation convertit la valeur de droite vers le type de destination ; un cast explicite rend cette conversion visible, mais ne vérifie pas si la valeur est appropriée. Pour un exemple portable, dérivez l’entier d’un littéral de caractère plutôt que de supposer qu’une valeur numérique telle que 65 représente A sur tous les systèmes. Ce programme montre les deux formes :
#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
Lorsque l’entier est représentable en char, la valeur est préservée. Un char simple peut être signé ou non signé. Convertir une valeur hors plage en un char signé a un résultat défini par l’implémentation, ou un signal défini par l’implémentation peut être émis. La conversion en unsigned char suit les règles de conversion des entiers non signés : le résultat est réduit modulo UCHAR_MAX + 1. Un cast explicite ne valide pas l’entrée et ne rend pas portable une conversion hors plage. Si vous devez interpréter une valeur d’octet, utilisez unsigned char et définissez l’encodage employé par vos données.
Formater un caractère sous forme de chaîne avec snprintf()
Utilisez snprintf() lorsque le résultat doit être une chaîne terminée par un caractère nul plutôt qu’un seul char. Sa conversion %c écrit un caractère ; la destination a aussi besoin de place pour le caractère nul final. L’argument de taille est la capacité totale du tableau de destination. En revanche, %d formate un entier en texte décimal.
Cet exemple formate le caractère A dans un tableau de deux octets, puis affiche la chaîne :
#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() renvoie le nombre de caractères qu’elle aurait écrits, sans compter le terminateur nul. Vérifier cette valeur permet à l’appelant de détecter un échec de formatage ou un résultat qui ne tenait pas. Cet exemple utilise la fonction de la bibliothèque standard C99 ; compilez-le dans un environnement C99 ou ultérieur.
Choisir la bonne conversion
- Pour un chiffre décimal de 0 à 9, ajoutez-lui
'0'pour former le caractère de chiffre correspondant. - Pour stocker une valeur de caractère dans un
char, affectez une valeur entière appropriée ; un cast explicite ne change aucune règle de plage. - Pour stocker un caractère sous forme de chaîne, utilisez
snprintf()avec%cet une capacité pour le caractère comme pour son terminateur. - Pour représenter un entier à plusieurs chiffres sous forme de texte, utilisez un formatage décimal tel que
%ddans un tableau de caractères.