如何在Java中将十六进制转换为八进制?


八进制数 - 八进制数也是一种可用的数字系统。八进制数用 8 个数字表示,从 0 到 7(0、1、2、3...7)。八进制数在数字系统中表示为以 8 为底。

十六进制数 - 十六进制数也是一种可用的数字系统。十六进制数用 16 个数字表示,从 0 到 15(0、1、2、3...15)。从 10 到 15,它分别表示为 A 到 F。十六进制数在数字系统中表示为以 16 为底。

在这里,我们首先将十六进制数转换为二进制数,其中每个数字的二进制数组合为四位数。获得所有这些二进制数后,我们将所有这些数字连接起来,然后必须将整个二进制数字集分成块,其中每个部分包含三位数字。然后,我们可以将这些二进制数字集转换为八进制数。通过这种方式,我们将十六进制数转换为八进制数。

换句话说,在获得十进制值后,我们连续求 8 的模值,然后通过连接这些值,我们可以得到相应的八进制值。

让我们看看如何使用 Java 编程语言来实现这一点。

举几个例子

示例 1

输入的十六进制数为 9AD

其转换后的十进制值为 2477

现在 2477 的八进制值为 4655

示例 2

输入的十六进制数为 219A

其转换后的十进制值为 8602

现在 8602 的八进制值为 20632

示例 3

输入的十六进制数为 21AD45

其转换后的十进制值为 2207045

现在 2207045 的八进制值为 10326505

算法

步骤 1 - 将输入数字作为字符串类型获取,可以通过静态输入方法或用户输入方法获取。

步骤 2 - 使用一些 switch case 定义给定十六进制数的每个数字的相应十进制值。

步骤 3 - 获取十进制值后,通过连续求 8 的模值并连接它们来将其转换为相应的八进制值。

步骤 4 - 最后,将计算出的八进制值作为输出打印。

多种方法

我们提供了不同方法的解决方案。

  • 使用静态输入值

  • 通过用户定义的方法

让我们逐一查看程序及其输出。

方法 1:使用静态输入值

在这种方法中,我们通过静态输入方法声明一个十六进制输入数字,并使用算法将十六进制数字转换为八进制数字。

示例

public class Main{
   public static void main(String[] args){
      
      //declare a variable to store the decimal number
      int decimalNumber = 0;
      
      //Declare and store a hexadecimal number by static input method.
      String hexadecimalNumber = "87FA";
      int a = hexadecimalNumber.length() - 1;
      
      //Loop to find the appropriate decimal number of given hexadecimal number
      for(int i = 0; i < hexadecimalNumber.length() ; i ++ ){
         
         //extract the character from the string.
         char c = hexadecimalNumber.charAt(i);
         switch (c){
            case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8':
            case '9':
               decimalNumber = decimalNumber + Integer.parseInt(Character.toString(c))*(int)Math.pow(16,a);
               a--; break;
            case 'a': case 'A':
               decimalNumber = decimalNumber + 10 * (int)Math.pow(16, a);
               a--; break;
            case 'b': case 'B':
               decimalNumber = decimalNumber + 11 * (int)Math.pow(16, a);
               a--; break;
            case 'c': case 'C':
               decimalNumber = decimalNumber + 12 * (int)Math.pow(16, a);
               a--; break;
            case 'd': case 'D':
               decimalNumber = decimalNumber + 13 * (int)Math.pow(16, a);
               a--;
               break;
            case 'e': case 'E':
               decimalNumber = decimalNumber + 14 * (int)Math.pow(16, a);
                a--; break;
            case 'f': case 'F':
               decimalNumber = decimalNumber + 15 * (int)Math.pow(16, a);
               a--; break;
            default:
            System.out.println("The number you have entered is invalid."); break;
         }
      }
      String octalNumber ="";// declare a variable to store the octal number in string format.
      
      //initiate the loop to convert decimal number into octal number.
      while(decimalNumber > 0){
         octalNumber = decimalNumber % 8 + octalNumber;
         decimalNumber = decimalNumber / 8;
      }
      System.out.println("The Octal Value of "+ hexadecimalNumber + " is " + octalNumber + ".");
   }
}

输出

The Octal Value of 87FA is 103772.

方法 2:使用用户定义的方法

在这种方法中,我们通过静态输入方法声明一个十六进制输入数字,并将这些数字作为参数传递给用户定义的方法,然后在方法内部使用算法将十六进制数字转换为八进制数字。

示例

public class Main{
   public static void main(String[] args){
      String inputNumber = "6FE4";//Declare and store a hexadecimal number by static input method.
      hexToOct(inputNumber);//call the user defined method to convert given hexadecimal number into octal.
   }
   //user defined method to convert the hexadecimal number into octal number
   public static void hexToOct(String hexadecimalNumber){
      int decimalNumber = 0;//declare a variable to store the decimal number
      int a = hexadecimalNumber.length() - 1;
      //Loop to find the appropriate decimal number of given hexadecimal number
      for(int i = 0; i < hexadecimalNumber.length() ; i ++ ){
         //extract the character from the string.
         char c = hexadecimalNumber.charAt(i);
         switch (c){
            case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8':
            case '9':
               decimalNumber = decimalNumber + Integer.parseInt(Character.toString(c))*(int)Math.pow(16,a);
               a--; break;
            case 'a': case 'A':
               decimalNumber = decimalNumber + 10 * (int)Math.pow(16, a);
               a--; break;
            case 'b': case 'B':
               decimalNumber = decimalNumber + 11 * (int)Math.pow(16, a);
               a--; break;
            case 'c':
               decimalNumber = decimalNumber + 12 * (int)Math.pow(16, a);
               a--; break;
            case 'd': case 'D':
               decimalNumber = decimalNumber + 13 * (int)Math.pow(16, a);
               a--; break;
            case 'e': case 'E':
               decimalNumber = decimalNumber + 14 * (int)Math.pow(16, a);
               a--; break;
            case 'f': case 'F':
               decimalNumber = decimalNumber + 15 * (int)Math.pow(16, a);
               a--; break;
            default:
               System.out.println("The number you have entered is invalid."); break;
         }
      }
      String octalNumber ="";// declare a variable to store the octal number in string format.
      //initiate the loop to convert decimal number into octal number.
      while(decimalNumber > 0){
         octalNumber = decimalNumber % 8 + octalNumber;
         decimalNumber = decimalNumber / 8;
      }
      System.out.println("The Octal Value of "+ hexadecimalNumber + " is " + octalNumber + ".");
   }
}

输出

The Octal Value of 6FE4 is 67744.

在本文中,我们探讨了如何使用不同的方法在 Java 中将十六进制数转换为八进制数。

更新于: 2023 年 3 月 6 日

877 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告