HOWTO · C
Convierte entero a carácter en C
Aprende cuándo sumar '0', asignar un valor entero a char o formatear un carácter como cadena en C.
En esta página
En C, elige la conversión según el resultado que necesites: suma '0' a un solo dígito decimal para obtener su carácter de dígito, asigna un valor entero de carácter a char, o usa snprintf() para colocar un carácter en una cadena. Son operaciones diferentes. Para convertir un entero de varios dígitos como 71 en el texto "71", formatéalo como texto decimal con %d; convertirlo en un solo char no puede contener ambos dígitos.
Convertir un solo dígito decimal en un carácter con '0'
Para un valor de 0 a 9, súmalo al literal de carácter '0'. C garantiza que los caracteres de los dígitos decimales tienen valores consecutivos, por lo que esto funciona sin suponer ASCII. Mantén la entrada dentro de ese rango: esta aritmética es para un solo dígito, no para convertir un entero completo en su cadena decimal.
Este programa completo convierte el valor 7 en su carácter de dígito y lo 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 una cadena que deba mostrar un número de varios dígitos, usa un formato decimal como %d en lugar de sumar '0' al número completo.
Convertir un valor entero en char
Un char almacena un valor de carácter, que en C también es un valor entero. El tipo int se usa comúnmente para los valores enteros antes de asignarlos a un char. La asignación convierte el valor del lado derecho al tipo de destino; una conversión explícita (cast) hace visible esa conversión, pero no comprueba si el valor es adecuado. Para un ejemplo portable, deriva el entero de un literal de carácter en lugar de suponer que un valor numérico como 65 representa A en todos los sistemas. Este programa muestra ambas 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
Cuando el entero es representable como char, el valor se conserva. Un char simple puede ser con signo o sin signo. Convertir un valor fuera de rango a un char con signo tiene un resultado definido por la implementación, o puede generarse una señal definida por la implementación. La conversión a unsigned char sigue las reglas de conversión de enteros sin signo: el resultado se reduce módulo UCHAR_MAX + 1. Una conversión explícita no valida la entrada ni hace portable una conversión fuera de rango. Si necesitas interpretar un valor de byte, usa unsigned char y define la codificación que utilizan tus datos.
Formatear un carácter como cadena con snprintf()
Usa snprintf() cuando el resultado deba ser una cadena terminada en nulo en lugar de un solo char. Su conversión %c escribe un carácter; el destino también necesita espacio para el carácter nulo final. El argumento de tamaño es la capacidad total del arreglo de destino. En cambio, %d formatea un entero como texto decimal.
Este ejemplo formatea el carácter A en un arreglo de dos bytes y luego imprime la cadena:
#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() devuelve el número de caracteres que habría escrito, sin contar el terminador nulo. Comprobar ese valor permite a quien llama detectar un fallo de formato o un resultado que no cabía. Este ejemplo usa la función de la biblioteca estándar de C99; compílalo en un entorno C99 o posterior.
Elegir la conversión adecuada
- Para un dígito decimal de 0 a 9, súmale
'0'para formar el carácter de dígito correspondiente. - Para almacenar un valor de carácter en
char, asigna un valor entero adecuado; una conversión explícita no cambia ninguna regla de rango. - Para almacenar un carácter como cadena, usa
snprintf()con%cy capacidad tanto para el carácter como para su terminador. - Para representar un entero de varios dígitos como texto, usa un formato decimal como
%den un arreglo de caracteres.