Convertir número a cadena en C

Convertir un número completo (no un dígito) a cadena en C es un poco (sólo un poco) complicado porque no hay una función que permita hacer eso así de fácil.

Esto es distinto a cuando convertimos un simple carácter de tipo char a un entero o un dígito entero a carácter, ahora veremos cómo convertir un número de 2 o más cifras en una cadena en el lenguaje C.

Cómo funciona la conversión

Para convertir usaremos la función sprintf que funciona como printf  pero ahora no imprime nada, sino que simplemente formatea una cadena y la almacena en un búfer indicado por nosotros.

Sabiendo esto, podemos formatear un número como cadena, y ya; así de simple, la función se encarga del resto y nosotros únicamente de reservar espacio del búfer.

No todo es tan sencillo, porque como convertimos un número entero a cadena, necesitamos reservar el espacio suficiente. Si usamos un unsigned long long, el número más grande que se puede representar es 18446744073709551615, el cual tiene 20 dígitos.

Si queremos un unsigned int el mismo ocupa 10 dígitos, porque el mayor es 4294967295. Como sea, antes de que quieras hacer la conversión recuerda ver la longitud que tienen. Por otro lado, recuerda reservar un carácter más aparte de los dígitos que tenga.

Por ejemplo, si es de 10 dígitos entonces reserva 11 para el carácter de terminación.

En resumen…

Usa sprintf para convertirlo. La sintaxis es:

sprintf(buferEnDondePonerLaCadenaFormateada, formato, cosaQueFormatear);

Por ejemplo:

sprintf(bufer, "%llu", numero);

Sigue leyendo para ver ejemplos.

Convertir unsigned long long en cadena usando C

Para irnos a los números más grandes, veamos cómo convertir un unsigned long long en cadena. Ya sea que este número sea un 1, 2 o hasta 18446744073709551615 la conversión será correcta.

Reservamos un búfer de 21 caracteres, 20 para los dígitos y 1 para el carácter de terminación.

La parte importante es la función enteroACadena. Igualmente podríamos no llamar a la función y usar sprintf, pero por separar las cosas lo hacemos.

Lo que hace esto es copiar la cadena formateada al búfer. No regresa nada porque modifica directamente a la cadena, la cual es un apuntador a un arreglo de caracteres.

Puedes probarlo aquí.

Convertir un simple entero sin signo

Ya convertimos un unsigned long long, ahora vamos a convertir un unsigned int.

El proceso es el mismo, sólo cambia el formato y los tipos de datos. Para formatear un entero sin signo usamos la letra u.

Puedes probarlo aquí.

Sobre la seguridad

Esta función de sprintf tiene una posible vulnerabilidad de un desbordamiento de búfer si no es usada con números. Si la usas por aprender o para cosas que no necesitan seguridad, está bien.

Pero en caso de que uses otros formatos o datos que provengan del usuario, y estás haciendo algo que debe ser seguro, entonces utiliza la función snprintf cuya sintaxis es:

snprintf(bufer, caracteresQueSeCopian, formato, cosaQueFormatear);

Es muy parecida a sprintf, pero como segundo argumento le decimos cuántos caracteres debe copiar.

Mira aquí lo que es un desbordamiento de búfer en C, o cómo puede hacerse un desbordamiento de búfer al usar scanf.

Conclusión

Así podemos convertir un número a cadena en C. Igualmente podríamos convertir cualquier tipo de dato, por ejemplo un float o double, siempre y cuando especifiquemos bien el formato.

Referencias

Únicamente la referencia a snprintf.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario