Programa en C para convertir sistema numérico hexadecimal a octal

Programa en C para convertir sistema numérico hexadecimal a octal

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

Ejemplo

Entrada

Input hexadecimal: 1A

Salida

Octal number: 32

Conocimientos requeridos

Programación básica en C, caso de cambio, bucle For, bucle While, matriz

Sistema numérico hexadecimal

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

Sistema numérico octal

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

Lógica para convertir hexadecimal a octal

No existe ningún algoritmo de conversión fácil y directo del sistema numérico hexadecimal al octal. A continuación se muestra la lógica descriptiva paso a paso para convertir un sistema numérico hexadecimal a decimal.

  1. Convierta el número hexadecimal dado a binario.
  2. Agrupe el binario convertido en grupos de 3 bits.
  3. Escriba el valor octal correspondiente de para cada dígito de número binario agrupado.

Tabla de conversión de binario a octal

Decimal Binario Octubre
0 000 0
1 001 1
2 010 2
3 011 3
4 100 4
5 101 5
6 110 6
7 111 7

Programa para convertir sistema numérico hexadecimal a octal

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

#include <stdio.h>

int main()
{
    char hex[17];
    long long octal, bin, place;
    int i = 0, rem, val;

    /* Input hexadecimal number from user */
    printf("Enter any hexadecimal number: ");
    gets(hex);

    octal = 0ll;
    bin = 0ll;
    place = 0ll;

    /* Hexadecimal to binary conversion */
    for(i=0; hex[i]!='\0'; i++)
    {
        bin = bin * place;

        switch(hex[i])
        {
            case '0':
                bin += 0;
                break;
            case '1':
                bin += 1;
                break;
            case '2':
                bin += 10;
                break;
            case '3':
                bin += 11;
                break;
            case '4':
                bin += 100;
                break;
            case '5':
                bin += 101;
                break;
            case '6':
                bin += 110;
                break;
            case '7':
                bin += 111;
                break;
            case '8':
                bin += 1000;
                break;
            case '9':
                bin += 1001;
                break;
            case 'a':
            case 'A':
                bin += 1010;
                break;
            case 'b':
            case 'B':
                bin += 1011;
                break;
            case 'c':
            case 'C':
                bin += 1100;
                break;
            case 'd':
            case 'D':
                bin += 1101;
                break;
            case 'e':
            case 'E':
                bin += 1110;
                break;
            case 'f':
            case 'F':
                bin += 1111;
                break;
            default:
                printf("Invalid hexadecimal input.");
        }

        place = 10000;
    }

    place = 1;

    /* Binary to octal conversion */
    while(bin > 0)
    {
        rem = bin % 1000;

        switch(rem)
        {
            case 0:
                val = 0;
                break;
            case 1:
                val = 1;
                break;
            case 10:
                val = 2;
                break;
            case 11:
                val = 3;
                break;
            case 100:
                val = 4;
                break;
            case 101:
                val = 5;
                break;
            case 110:
                val = 6;
                break;
            case 111:
                val = 7;
                break;
        }

        octal = (val * place) + octal;
        bin /= 1000;

        place *= 10;
    }

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

    return 0;
}

Salida

Enter any hexadecimal number: fff
Hexadecimal number = fff
Octal number = 7777