Programa para convertir hexadecimal a octal en C

Programa para convertir hexadecimal a octal en C

Programa para convertir hexadecimal a octal

¿Qué son los números hexadecimales?

Los números hexadecimales son los números que tienen base 16. Utiliza 16 dígitos diferentes para representar los números. Puede ser una combinación de letras y números. Utiliza números del 0 al 9 y letras de la A a la F.

Ejemplo: (5D2)16, (9AD1)16, (ABC)16

¿Qué son los números octales?

Los números octales son números que tienen base 8. Estos números usan dígitos del 0 al 7. Se denota como o8 y o es un número decimal octal.

Ejemplo: (11)8, (321)8,(46)8

# Conversión hexadecimal a octal (algoritmo)

La conversión de hexadecimal a octal no se puede hacer directamente. En primer lugar, debemos convertir el hexadecimal en su número decimal equivalente y luego el decimal en octal. Siga los pasos a continuación para comprender el proceso.

  1. Considere el número hexadecimal dado y cuente la cantidad de dígitos en el número.
  2. Si n es la posición del dígito desde el extremo derecho, multiplique cada dígito con 16n-1
  3. Suma los términos después de la multiplicación. La resultante es la forma decimal equivalente
  4. Divida el número decimal con 8. Anote el resto.
  5. Continúe con los pasos 6 y 7 con el cociente, hasta que el cociente sea cero
  6. Escribe los restos en orden inverso
  7. El número obtenido es el resultado requerido.

Ejemplo:

Entrada:- Número hexadecimal:5D6C

Salida:- Número octal:56554

Código:

// C Program for Hexadecimal to Octal Conversion

#include<stdio.h>

#include<string.h>

#include<math.h>

int convert(char hexa[])

{

    int i,size, deci=0, octa=0;

    for(size=0; hexa[size]!='\0'; size++);  //this loop calculates size of hexadecimal number

    for(i=0; hexa[i]!='\0'; i++,size--)

    {

        if(hexa[i]>='0' && hexa[i]<='9')

        { 

            deci= deci + (hexa[i]-'0')*pow(16,size-1);

        }

        if(hexa[i]>='A' && hexa[i]<='F')

        {

            deci = deci + (hexa[i]-55)*pow(16,size-1);

        }

        if(hexa[i]>='a' && hexa[i]<='f')

        {

            deci = deci + (hexa[i]-87)*pow(16,size-1);

        }

    } // deci contains the decimal value of given hexadecimal number. 

    i=1;

    while(deci!=0)

    {

        octa = octa + (deci%8)*i;

        deci = deci/8;

        i = i*10;

    }

    return octa;

}

int main()

{

    char hexa[20];

    printf("Enter Hexadecimal Number : ");

    scanf("%s",hexa);

    printf("Equivalent Octal Value = %d",convert(hexa));

    return 0;

}