Programa en C para convertir sistemas numéricos octales a hexadecimales

Programa en C para convertir sistemas numéricos octales a hexadecimales

Escriba un programa en C para ingresar el número octal del usuario y convertirlo al sistema numérico hexadecimal. Cómo convertir del sistema numérico octal al sistema numérico hexadecimal en el programa C. Lógica para convertir sistema numérico octal a hexadecimal en programación C.

Ejemplo

Entrada

Input octal number: 175

Salida

Hexadecimal number: 7D

Conocimientos requeridos

Programación básica en C, declaración Switch...case, ciclo while, matriz

Sistema numérico octal

Sistema de numeración octal es un sistema numérico de base 8. Utiliza 8 símbolos para representar todos sus números, es decir, 01234567

Sistema numérico hexadecimal

Número hexadecimal es un sistema numérico de base 16. Utiliza 16 símbolos para representar todos sus números, es decir, 0123456789ABCDEF

Lógica para convertir octal a hexadecimal

No hay conversión directa del sistema numérico octal al hexadecimal. Primero debe convertir el sistema numérico octal dado a binario. Luego, el sistema numérico binario se convierte al sistema numérico hexadecimal.

A continuación se muestra la lógica descriptiva paso a paso para convertir octal a hexadecimal.

  1. Convierta el número octal dado al sistema numérico binario.
  2. Extraer bits binarios en un grupo de 4 bits comenzando desde el lado derecho.
  3. Escriba el hexadecimal correspondiente de los 4 bits binarios extraídos.

Tabla de conversión de binario a hexadecimal

Decimal Binario hexadecimal
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

Programa para convertir octal a hexadecimal

/**
 * C program to convert Octal to Hexadecimal number system
 */

#include <stdio.h>

int main()
{
    int OCTALVALUES[] = {0, 1, 10, 11, 100, 101, 110, 111};

    long long octal, tempOctal, binary, place;
    char hex[65] = "";
    int rem;

    place = 1;
    binary = 0;
    
    /* Input octal number from user */
    printf("Enter any octal number: ");
    scanf("%lld", &octal);
    tempOctal = octal;

    /*
     * Octal to binary conversion
     */
    while(tempOctal > 0)
    {
        rem = tempOctal % 10;
        binary = (OCTALVALUES[rem] * place) + binary;
        tempOctal /= 10;

        place *= 1000;
    }
    
    /* 
     * Binary to hexadecimal conversion
     */
    while(binary > 0)
    {
        rem = binary % 10000;
        switch(rem)
        {
            case 0:
                strcat(hex, "0");
                break;
            case 1:
                strcat(hex, "1");
                break;
            case 10:
                strcat(hex, "2");
                break;
            case 11:
                strcat(hex, "3");
                break;
            case 100:
                strcat(hex, "4");
                break;
            case 101:
                strcat(hex, "5");
                break;
            case 110:
                strcat(hex, "6");
                break;
            case 111:
                strcat(hex, "7");
                break;
            case 1000:
                strcat(hex, "8");
                break;
            case 1001:
                strcat(hex, "9");
                break;
            case 1010:
                strcat(hex, "A");
                break;
            case 1011:
                strcat(hex, "B");
                break;
            case 1100:
                strcat(hex, "C");
                break;
            case 1101:
                strcat(hex, "D");
                break;
            case 1110:
                strcat(hex, "E");
                break;
            case 1111:
                strcat(hex, "F");
            break;
        }

        binary /= 10000;
    }

    strrev(hex);

    printf("Octal number: %lld\n", octal);
    printf("Hexadecimal number: %s", hex);

    return 0;
}

Salida

Enter any octal number: 125715
Octal number: 125715
Hexadecimal number: ABCD