C語言程式:將十六進位制轉換為八進位制


我們得到一個以字串形式表示的十六進位制數;任務是將其轉換為八進位制。要將十六進位制數轉換為八進位制,我們需要:

  • 找到十六進位制數的二進位制等價形式。
  • 將二進位制數轉換為八進位制。

什麼是十六進位制數

十六進位制數是以16為基數的數字,數字範圍從0到9,從10開始,數字表示為A表示10,B表示11,C表示12,D表示13,E表示14,F表示15。

要將十六進位制數轉換為二進位制數,每個數字都轉換為其4位的二進位制等價形式,然後將這些數字組合起來形成一個對應的二進位制數。

什麼是八進位制數

計算機中的八進位制數以8為基數表示,範圍為0到7,八進位制數由三個二進位制數或三個二進位制位組成。

我們需要做什麼

例如,我們有一個十六進位制數1A6,這意味著1、10和6。現在,對於十六進位制到八進位制的轉換,我們首先需要找到十六進位制數的二進位制等價形式,即:

所以,1A6的二進位制表示為:0001 1010 0110

現在,在找到十六進位制數的二進位制表示後,下一步任務是找到二進位制數的八進位制表示。

在此之前,我們將二進位制數分組為三個一組。分組後,我們將得到000 110 100 110

其八進位制表示為:

所以,十六進位制數1A6的八進位制表示為:646

示例

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

Input: 1AA
Output: 652

我們將使用的方法來解決給定的問題:

  • 獲取輸入並將其儲存為字串。
  • 按照以下方法將十六進位制數或表示式轉換為二進位制:
    • 檢查所有16種十六進位制情況,並新增其相應的二進位制表示。
    • 返回結果。
  • 將二進位制數轉換為八進位制數,請按照以下步驟操作:
    • 透過比較二進位制數到八進位制的所有可能情況,取3位。
    • 設定八進位制的值 = (val * place) + octal;
    • 將二進位制數除以1000
    • place *= 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

更新時間: 2019年11月20日

1K+ 閱讀量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.