HOWTO · C
Converter Inteiro para Char em C
Aprenda quando somar '0', atribuir um valor inteiro a char ou formatar um caractere como string em C.
Nesta página
Em C, escolha a conversão com base no resultado de que você precisa: some '0' a um único dígito decimal para obter seu caractere de dígito, atribua um valor inteiro de caractere a char, ou use snprintf() para colocar um caractere em uma string. São operações diferentes. Para transformar um inteiro de vários dígitos como 71 no texto "71", formate-o como texto decimal com %d; convertê-lo em um único char não pode conter os dois dígitos.
Converter um único dígito decimal em um caractere com '0'
Para um valor de 0 a 9, some-o ao literal de caractere '0'. O C garante que os caracteres dos dígitos decimais têm valores consecutivos, portanto isso funciona sem presumir ASCII. Mantenha a entrada dentro desse intervalo: esta aritmética é para um dígito, não para converter um inteiro inteiro em sua string decimal.
Este programa completo converte o valor 7 em seu caractere de dígito e o imprime:
#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
Para uma string que precise mostrar um número de vários dígitos, use uma formatação decimal como %d em vez de somar '0' ao número inteiro.
Converter um valor inteiro em char
Um char armazena um valor de caractere, que em C também é um valor inteiro. O tipo int é comumente usado para valores inteiros antes de serem atribuídos a um char. A atribuição converte o valor do lado direito para o tipo de destino; um cast explícito torna essa conversão visível, mas não verifica se o valor é adequado. Para um exemplo portável, derive o inteiro de um literal de caractere em vez de presumir que um valor numérico como 65 representa A em todos os sistemas. Este programa mostra as duas formas:
#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 o inteiro é representável como char, o valor é preservado. Um char simples pode ser com sinal ou sem sinal. Converter um valor fora do intervalo para um char com sinal tem um resultado definido pela implementação, ou um sinal definido pela implementação pode ser gerado. A conversão para unsigned char segue as regras de conversão de inteiros sem sinal: o resultado é reduzido módulo UCHAR_MAX + 1. Um cast explícito não valida a entrada nem torna portável uma conversão fora do intervalo. Se você precisar interpretar um valor de byte, use unsigned char e defina a codificação que seus dados usam.
Formatar um caractere como string com snprintf()
Use snprintf() quando o resultado precisar ser uma string terminada em nulo em vez de um único char. Sua conversão %c escreve um caractere; o destino também precisa de espaço para o caractere nulo final. O argumento de tamanho é a capacidade total do array de destino. Em contrapartida, %d formata um inteiro como texto decimal.
Este exemplo formata o caractere A em um array de dois bytes e depois imprime a string:
#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() retorna o número de caracteres que teria escrito, sem contar o terminador nulo. Verificar esse valor permite que o chamador detecte uma falha de formatação ou um resultado que não coube. Este exemplo usa a função da biblioteca padrão C99; compile-o em um ambiente C99 ou posterior.
Escolher a conversão certa
- Para um dígito decimal de 0 a 9, some
'0'a ele para formar o caractere de dígito correspondente. - Para armazenar um valor de caractere em
char, atribua um valor inteiro adequado; um cast explícito não altera nenhuma regra de intervalo. - Para armazenar um caractere como string, use
snprintf()com%ce capacidade tanto para o caractere quanto para seu terminador. - Para representar um inteiro de vários dígitos como texto, use uma formatação decimal como
%dem um array de caracteres.