2019-10-12 11:23:52 +03:00
|
|
|
/* C program to convert Hexadecimal to Octal number system */
|
2019-10-04 12:04:44 +03:00
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
2020-04-08 16:45:12 +03:00
|
|
|
#define MAX_STR_LEN 17
|
|
|
|
char hex[MAX_STR_LEN];
|
2019-10-04 12:04:44 +03:00
|
|
|
long long octal, bin, place;
|
|
|
|
int i = 0, rem, val;
|
|
|
|
|
|
|
|
/* Input hexadecimal number from user */
|
|
|
|
printf("Enter any hexadecimal number: ");
|
2020-04-08 16:45:12 +03:00
|
|
|
fgets(hex, MAX_STR_LEN, stdin);
|
2019-10-04 12:04:44 +03:00
|
|
|
|
|
|
|
octal = 0ll;
|
|
|
|
bin = 0ll;
|
|
|
|
place = 0ll;
|
|
|
|
|
|
|
|
/* Hexadecimal to binary conversion */
|
2020-04-08 16:45:12 +03:00
|
|
|
for (i = 0; hex[i] != '\0'; i++)
|
2019-10-04 12:04:44 +03:00
|
|
|
{
|
|
|
|
bin = bin * place;
|
|
|
|
|
2020-04-08 16:45:12 +03:00
|
|
|
switch (hex[i])
|
2019-10-04 12:04:44 +03:00
|
|
|
{
|
2020-04-08 16:45:12 +03:00
|
|
|
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.");
|
2019-10-04 12:04:44 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
place = 10000;
|
|
|
|
}
|
|
|
|
|
|
|
|
place = 1;
|
|
|
|
|
|
|
|
/* Binary to octal conversion */
|
2020-04-08 16:45:12 +03:00
|
|
|
while (bin > 0)
|
2019-10-04 12:04:44 +03:00
|
|
|
{
|
|
|
|
rem = bin % 1000;
|
|
|
|
|
2020-04-08 16:45:12 +03:00
|
|
|
switch (rem)
|
2019-10-04 12:04:44 +03:00
|
|
|
{
|
2020-04-08 16:45:12 +03:00
|
|
|
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;
|
2019-10-04 12:04:44 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
octal = (val * place) + octal;
|
|
|
|
bin /= 1000;
|
|
|
|
|
|
|
|
place *= 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("Hexadecimal number = %s\n", hex);
|
|
|
|
printf("Octal number = %lld", octal);
|
|
|
|
|
|
|
|
return 0;
|
2020-04-08 16:45:12 +03:00
|
|
|
}
|