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.

No te vayas sin seguirme en Twitter, Facebook y GitHub, así me motivas a escribir más posts.
Igualmente te invito a suscribirte en la parte superior derecha escribiendo tu correo en el formulario.
Si tienes dudas déjalas en un comentario


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: