Decimal a binario, octal y hexadecimal en C con itoa y ltoa

Introducción

Ya vimos cómo transformar un decimal a binario en C a mano, es decir, con un ejercicio hecho por nosotros, ignorando el rendimiento o velocidad.

Como lo dije en ese post, lo hicimos así porque era un simple ejercicio. Veamos ahora cómo podemos hacerlo de la forma correcta y repasemos las funciones ltoa e itoa.

Soporte para punto decimal

Varios de mis lectores me han pedido la conversión de decimal a otras bases soportando el punto decimal o parte fraccionaria. Les informo que ya he creado una función para ello. Puedes ver el post aquí.

Explicación de ltoa e itoa

Estas funciones convierten un long o un int a un string, cambiando la base de los mismos. El nombre quiere decir, respectivamente, long to ascii e int to ascii.

Dichos métodos vienen en la librería stdlib.h.

Diferencia entre itoa y ltoa

La única diferencia es el tipo de dato que reciben, itoa recibe un entero o int, pero ltoa recibe un long.

Las llamadas a los métodos son iguales, es decir, reciben el mismo número de argumentos.

Convertir decimal a binario

Hablar es de mal gusto, así que aquí dejo el código:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    // El número que el usuario va a ingresar
    long decimal = 0;

    // Una cadena de máximo 63 bits, o sea longitud 63
    char cadena[63];

    printf("Ingresa un numero decimal:\n");
    scanf("%llu", &decimal);

    /*
    ltoa e itoa no regresan nada; modifican directamente a la variable
    El último argumento es la base: 2 en este caso
    */
    ltoa(decimal, cadena, 2);
    printf("El numero en binario es: %s\n", cadena);
    return 0;
}

La parte más importante es en donde llamamos a ltoa y le pasamos 3 argumentos:

  1. El número long que queremos convertir
  2. La cadena en donde se guardará el resultado
  3. La base, que puede ser 2 para binario, 8 para octal y 16 para hexadecimal

La salida es esta:

Decimal a binario en C
Decimal a binario en C

Convertir decimal a octal

El mismo código que usamos arriba podemos usarlo aquí, simplemente cambiando la base. Quedaría así:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    // El número que el usuario va a ingresar
    unsigned long long int decimal = 0;

    // Una cadena de máximo 63 bits, o sea longitud 63
    char cadena[63];

    printf("Ingresa un numero decimal:\n");
    scanf("%llu", &decimal);

    /*
    ltoa e itoa no regresan nada; modifican directamente a la variable
    El último argumento es la base: 8 en este caso
    */
    ltoa(decimal, cadena, 8);
    printf("El numero en octal es: %s\n", cadena);
    return 0;
}

Aquí dejo lo que pasa al ejecutarlo:

Decimal a octal en C
Decimal a octal en C

Como vemos lo que cambia es la base de 2 a base 8.

Convertir decimal a hexadecimal

Lo mismo de arriba pero cambiando la base a 16. Queda así:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    // El número que el usuario va a ingresar
    unsigned long long int decimal = 0;

    // Una cadena de máximo 63 bits, o sea longitud 63
    char cadena[63];

    printf("Ingresa un numero decimal:\n");
    scanf("%llu", &decimal);

    /*
    ltoa e itoa no regresan nada; modifican directamente a la variable
    El último argumento es la base: 16 en este caso
    */
    ltoa(decimal, cadena, 16);
    printf("El numero en hexadecimal es: %s\n", cadena);
    return 0;
}

Lo podemos ejecutar y probar:

Decimal a hexadecimal en C
Decimal a hexadecimal en C

Convertir decimal a cualquier base

Ya que sabemos que la base puede ser 2, 8 o 16 (también 10, pero no serviría porque el número decimal ya es base 10) así que podemos pedirle al usuario la base y dependiendo de ella convertir el número.

El programa queda así:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    // El número que el usuario va a ingresar
    unsigned long long int decimal = 0;

    // Una cadena de máximo 63 bits, o sea longitud 63
    char cadena[63];

    // La base que el usuario ingresa
    int base = 0;

    printf("Ingresa un numero decimal:\n");
    scanf("%llu", &decimal);

    printf("Ingresa la base [2, 8, 16]:\n");
    scanf("%d", &base);

    /*
    ltoa e itoa no regresan nada; modifican directamente a la variable
    El último argumento es la base
    */
    ltoa(decimal, cadena, base);
    printf("El numero en base %d es: %s\n", base, cadena);
    return 0;
}

Con la siguiente salida:

Convertir decimal a múltiples bases
Convertir decimal a múltiples bases

 

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

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.

8 comentarios en “Decimal a binario, octal y hexadecimal en C con itoa y ltoa”

  1. Pingback: Hexadecimal a decimal en C - Parzibyte's blog

  2. Pingback: Convertir binario a decimal en C - Parzibyte's blog

    1. una pregunta mas con itoa y ltoa se puede realizar hexadecimal a binario y a las otras conversiones, como evitando el proceso mas extenso o es la libreria stdlib.h que permite hacerlo con menos proceso. Gracias

    2. Hola, en los próximos días publicaré más entradas para saber cómo realizar las conversiones. Pero no te compliques, si quieres convertir hexadecimal a binario primero convierte hexadecimal a decimal, y luego decimal a binario.

Dejar un comentario

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