Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 프로그램에서 16진수를 8진수로 변환하는 프로그램

<시간/>

16진수 숫자가 문자열로 주어집니다. 작업은 8진수로 변환하는 것입니다. 16진수를 8진수로 변환하려면 다음을 수행해야 합니다. -

  • 16진수에 해당하는 이진수를 찾습니다.
  • 2진수를 8진수로 변환합니다.

16진수란 무엇입니까

16진수는 16의 밑수가 되는 수로 0-9까지 다양하며 10부터 숫자는 10을 나타내는 A, 11을 나타내는 B, 12를 나타내는 C, 13을 나타내는 D, 14를 나타내는 E, F로 표시됩니다. 15.

16진수를 2진수로 변환하려면 모든 숫자를 4비트에 해당하는 2진수로 변환한 다음 이 숫자를 결합하여 해당하는 하나의 2진수를 형성합니다.

8진수란 무엇입니까

컴퓨터에서 8진수는 8진수로 표현되며, 0-7 형식의 8진수는 3개의 이진수 또는 3개의 이진수를 그룹화하여 만듭니다.

우리가 해야 할 일

16진수 1A6이 있으므로 1, 10 및 6을 의미하므로 16진수에서 8진수로 먼저 16진수에 해당하는 2진수를 찾아야 합니다. 즉,

C 프로그램에서 16진수를 8진수로 변환하는 프로그램

따라서 1A6의 이진수 =0001 1010 0110

이제 16진수의 2진수를 찾은 후 다음 작업은 2진수의 8진수를 찾는 것입니다.

그 전에 이진수를 3으로 그룹화합니다. 3으로 그룹화하면 000 110 100 110이 됩니다.

8진수 표현은 다음과 같습니다. -

C 프로그램에서 16진수를 8진수로 변환하는 프로그램

따라서 16진수 1A6의 8진수 표현은 -646입니다.

예시

Input: 1A6
Output: Octal Value = 646
Explanation:

Input: 1AA
Output: 652

주어진 문제를 해결하기 위해 사용할 접근 방식 -

  • 입력을 받아 문자열로 저장합니다.
  • 아래 방법에 따라 16진수 또는 표현식을 2진수로 변환하십시오. -
    • 각각의 2진법 표현을 추가하여 16진법의 모든 16가지 경우를 확인하십시오.
    • 결과를 반환합니다.
  • 2진수를 8진수로 변환하려면 다음 단계를 따르십시오. -
    • 2진수와 8진수의 가능한 모든 경우를 비교하여 세 자리를 차지하세요.
    • 8진수 =(val * place) + 8진수 값을 설정합니다.
    • 2진수를 1000으로 나누기
    • 장소 *=10
  • 결과를 반환합니다.

알고리즘

Start
Step 1-> In function long long int hexa_binary(char hex[])
   Declare variables binary, place
   Declare and initialize i = 0, rem, val
   Initialize t n = strlen(hex)
   Initialize binary = 0ll and place = 0ll
   Loop For i = 0 and hex[i] != '\0' and i++ {
      binary = binary * place;
      switch (hex[i]) {
         case '0':
            binary += 0
         case '1':
            binary += 1
         case '2':
            binary += 10
         case '3':
            binary += 11
         case '4':
            binary += 100
         case '5':
            binary += 101
         case '6':
            binary += 110
         case '7':
            binary += 111
         case '8':
            binary += 1000
         case '9':
            binary += 1001
         case 'a':
         case 'A':
            binary += 1010
         case 'b':
         case 'B':
            binary += 1011
         case 'c':
         case 'C':
            binary += 1100
         case 'd':
         case 'D':
            binary += 1101;
            break;
         case 'e':
         case 'E':
            binary += 1110;
            break;
         case 'f':
         case 'F':
            binary += 1111;
            break;
         default:
            printf("Invalid hexadecimal input.");
      }
      place = 10000;
   }
   return binary;
}
long long int binary_oct(long long binary) {
   long long int octal, place;
   int i = 0, rem, val;
   octal = 0ll;
   place = 0ll;
   place = 1;
   while (binary > 0) {
      rem = binary % 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;
      binary /= 1000;
      place *= 10;
   }
   return octal;
}
long long int hexa_oct(char hex[]) {
   long long int octal, binary;
   // convert HexaDecimal to Binary
   binary = hexa_binary(hex);
   // convert Binary to Octal
   octal = binary_oct(binary);
   return octal;
}
int main() {
   char hex[20] = "1a99";
   printf("Octal Value = %lld", hexa_oct(hex));
   return 0;
}

예시

#include <stdio.h>
#include <string.h>
#include <math.h>
//To convert hex to binary first
long long int hexa_binary(char hex[]) {
   long long int binary, place;
   int i = 0, rem, val;
   int n = strlen(hex);
   binary = 0ll;
   place = 0ll;
   for (i = 0; hex[i] != '\0'; i++) {
      binary = binary * place;
      switch (hex[i]) {
      case '0':
         binary += 0;
         break;
      case '1':
         binary += 1;
         break;
      case '2':
         binary += 10;
         break;
      case '3':
         binary += 11;
         break;
      case '4':
         binary += 100;
         break;
      case '5':
         binary += 101;
         break;
      case '6':
         binary += 110;
         break;
      case '7':
         binary += 111;
         break;
      case '8':
         binary += 1000;
         break;
      case '9':
         binary += 1001;
         break;
      case 'a':
      case 'A':
         binary += 1010;
         break;
      case 'b':
      case 'B':
         binary += 1011;
         break;
      case 'c':
      case 'C':
         binary += 1100;
         break;
      case 'd':
      case 'D':
         binary += 1101;
         break;
      case 'e':
      case 'E':
         binary += 1110;
         break;
      case 'f':
      case 'F':
         binary += 1111;
         break;
      default:
         printf("Invalid hexadecimal input.");
      }
      place = 10000;
   }
   return binary;
}
//To convert binary to octal
long long int binary_oct(long long binary) {
   long long int octal, place;
   int i = 0, rem, val;
   octal = 0ll;
   place = 0ll;
   place = 1;
   // giving all binary numbers for octal conversion
   while (binary > 0) {
      rem = binary % 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;
      binary /= 1000;
      place *= 10;
   }
   return octal;
}
// to convert the hexadecimal number to octal
long long int hexa_oct(char hex[]) {
   long long int octal, binary;
   // convert HexaDecimal to Binary
   binary = hexa_binary(hex);
   // convert Binary to Octal
   octal = binary_oct(binary);
   return octal;
}
//main function
int main() {
   char hex[20] = "5CD";
   printf("Octal Value = %lld", hexa_oct(hex));
   return 0;
}

출력

Octal Value = 2715