HOWTO · C

Convertire Integer a Char in C

Scopri quando aggiungere '0', assegnare un valore intero a char o formattare un carattere come stringa in C.

In questa pagina

In C, scegli la conversione in base al risultato che ti serve: aggiungi '0' a una singola cifra decimale per ottenere il suo carattere cifra, assegna un valore intero di carattere a char, oppure usa snprintf() per inserire un carattere in una stringa. Sono operazioni diverse. Per trasformare un intero a più cifre come 71 nel testo "71", formattalo come testo decimale con %d; convertirlo in un singolo char non può contenere entrambe le cifre.

Convertire una singola cifra decimale in un carattere con '0'

Per un valore da 0 a 9, aggiungilo al letterale di carattere '0'. C garantisce che i caratteri delle cifre decimali abbiano valori consecutivi, quindi questo funziona senza presupporre ASCII. Mantieni l’input in questo intervallo: questa aritmetica è per una singola cifra, non per convertire un intero completo nella sua stringa decimale.

Questo programma completo converte il valore 7 nel suo carattere cifra e lo stampa:

#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

Per una stringa che deve mostrare un numero a più cifre, usa una formattazione decimale come %d invece di aggiungere '0' all’intero numero.

Convertire un valore intero in char

Un char memorizza un valore di carattere, che in C è anche un valore intero. Il tipo int è comunemente usato per i valori interi prima che vengano assegnati a un char. L’assegnazione converte il valore di destra nel tipo di destinazione; un cast esplicito rende visibile questa conversione, ma non verifica se il valore è adatto. Per un esempio portabile, deriva l’intero da un letterale di carattere invece di supporre che un valore numerico come 65 rappresenti A su ogni sistema. Questo programma mostra entrambe le forme:

#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

Quando l’intero è rappresentabile come char, il valore viene preservato. Un char semplice può essere con segno o senza segno. Convertire un valore fuori intervallo in un char con segno ha un risultato definito dall’implementazione, oppure può essere sollevato un segnale definito dall’implementazione. La conversione in unsigned char segue le regole di conversione degli interi senza segno: il risultato viene ridotto modulo UCHAR_MAX + 1. Un cast esplicito non convalida l’input e non rende portabile una conversione fuori intervallo. Se devi interpretare un valore di byte, usa unsigned char e definisci la codifica usata dai tuoi dati.

Formattare un carattere come stringa con snprintf()

Usa snprintf() quando il risultato deve essere una stringa terminata da null invece di un singolo char. La sua conversione %c scrive un carattere; la destinazione ha bisogno anche di spazio per il carattere nullo finale. L’argomento di dimensione è la capacità totale dell’array di destinazione. Al contrario, %d formatta un intero come testo decimale.

Questo esempio formatta il carattere A in un array di due byte e poi stampa la stringa:

#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() restituisce il numero di caratteri che avrebbe scritto, senza contare il terminatore nullo. Controllare quel valore permette a chi chiama di rilevare un errore di formattazione o un risultato che non entrava. Questo esempio usa la funzione della libreria standard C99; compilalo in un ambiente C99 o successivo.

Scegliere la conversione giusta

  • Per una cifra decimale da 0 a 9, aggiungi '0' per formare il carattere cifra corrispondente.
  • Per memorizzare un valore di carattere in char, assegna un valore intero adatto; un cast esplicito non cambia nessuna regola di intervallo.
  • Per memorizzare un carattere come stringa, usa snprintf() con %c e capacità sia per il carattere sia per il suo terminatore.
  • Per rappresentare un intero a più cifre come testo, usa una formattazione decimale come %d in un array di caratteri.