【问题标题】:How can I convert a hexadecimal number into binary without using parse or automatic conversion如何在不使用解析或自动转换的情况下将十六进制数转换为二进制
【发布时间】:2019-07-10 21:03:45
【问题描述】:

下面我有一个名为 'hextoBinary' 的方法,它通过 void 类型返回十六进制到二进制的转换。

为了让我继续我的程序,我需要一个从十六进制到二进制方法的转换,该方法返回和 int,以便我可以使用我的 'hextoDecimal' 将该二进制 int 转换为十进制 方法。

任何人都可以帮助我或指导我采取什么方法,我已经坚持了一段时间了。我仅限于手动执行此操作,而不是使用解析或 java 自动转换。

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;

public class Main
{
    static void hexToBinary(char hexdec[])
    {
        for (char c: hexdec)
        {
            switch (c)
            {
                case '0':
                    System.out.print("0000");
                    break;
                case '1':
                    System.out.print("0001");
                    break;
                case '2':
                    System.out.print("0010");
                    break;
                case '3':
                    System.out.print("0011");
                    break;
                case '4':
                    System.out.print("0100");
                    break;
                case '5':
                    System.out.print("0101");
                    break;
                case '6':
                    System.out.print("0110");
                    break;
                case '7':
                    System.out.print("0111");
                    break;
                case '8':
                    System.out.print("1000");
                    break;
                case '9':
                    System.out.print("1001");
                    break;
                case 'A':
                    System.out.print("1010");
                    break;
                case 'B':
                    System.out.print("1011");
                    break;
                case 'C':
                    System.out.print("1100");
                    break;
                case 'D':
                    System.out.print("1101");
                    break;
                case 'E':
                    System.out.print("1110");
                    break;
                case 'F':
                    System.out.print("1111");
                    break;
                default:
                    System.out.print("\nInvalid hexadecimal digit " + hexdec[c]);
            }
        }
    }

    public static int hextoDecimal(int n)
    {
        int decimal = 0, p = 0;
        while(n != 0)
        {
            decimal += ((n % 10) * Math.pow(2,p));
            n = n / 10;
            p++;
        }
        return decimal;
    }

    public static void main(String[] args) throws IOException
    {
        Scanner sc = new Scanner(new File("RAMerrors8x4c"));
        ArrayList<String> hexValues = new ArrayList<>();

        while(sc.hasNext())
        {
            hexValues.add(sc.nextLine());
        }

        hexToBinary(hexValues.get(0).toCharArray());
    }
}

【问题讨论】:

    标签: java intellij-idea binary hex decimal


    【解决方案1】:

    此代码基于来自here 的一些代码,但该链接似乎不再有效。无论如何,从一个十六进制字符串你可以得到一个像这样的 int:

    int hexToDecimal(String s){
      int result = 0;
      int digit = 0;
      for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (c >= '0' && c <= '9')
           digit = c - '0';
        else 
          if (c >= 'A' && c <= 'F')
            digit = 10 + c - 'A';
          else 
            inputError(s);
        result = 16 * result + digit;
      }
      return result
    }
    

    【讨论】:

    • 抱歉,我第一次没有正确阅读这个问题。尽管如此,也许上面的代码可能会有所帮助,因为它可以修改为转换,因为您可以在结果上调用 Integer.toBinaryString,或者实际上在现有 hextoDecimal 函数的结果上调用。
    【解决方案2】:

    我稍微修改了你的代码。

    一个。在您的代码中,仅打印了第一个十六进制。

    变化:

    • 为每个十六进制字符串调用 hexToBinary。

    b.二进制值在打印后被丢弃,因此无法重复使用。

    变化:

    • 将 hexToBinary 的返回类型从 void 更改为 String,并返回计算得到的二进制值。

    • 1234563那个)
    • 在主目录中:另外将所有返回的二进制值收集到一个名为“binaryValues”的数组列表中,以便将它们用于下一步。

    通过上述(少量)更改,我现在拥有所有已计算的二进制值。

    所以我可以简单地在 binaryToDecimal 方法中使用它们,该方法只是对按其位置加权的二进制值求和。

    为什么不重蹈覆辙?因为您需要将 A-F 转换为您的 hexToBinary 已经做过的数字。因此,存储这些值可以让您再次执行该步骤。我有一种感觉,这就是你的老师在组合这样的任务时所想的。

    生成的代码是:

    import java.io.*;
    import java.util.Scanner;
    import java.util.ArrayList;
    
    public class Main
    {
         static String hexToBinary(char hexdec[]) {
                String hex = "";
                for (char c : hexdec) {
                    switch (c) {
                        case '0':
                            System.out.print("0000");
                            hex += "0000";
                            break;
                        case '1':
                            System.out.print("0001");
                            hex += "0001";
                            break;
                        case '2':
                            System.out.print("0010");
                            hex += "0010";
                            break;
                        case '3':
                            System.out.print("0011");
                            hex += "0011";
                            break;
                        case '4':
                            System.out.print("0100");
                            hex += "0100";
                            break;
                        case '5':
                            System.out.print("0101");
                            hex += "0101";
                            break;
                        case '6':
                            System.out.print("0110");
                            hex += "0110";
                            break;
                        case '7':
                            System.out.print("0111");
                            hex += "0111";
                            break;
                        case '8':
                            System.out.print("1000");
                            hex += "1000";
                            break;
                        case '9':
                            System.out.print("1001");
                            hex += "1001";
                            break;
                        case 'A':
                            System.out.print("1010");
                            hex += "1110";
                            break;
                        case 'B':
                            System.out.print("1011");
                            hex += "1111";
                            break;
                        case 'C':
                            System.out.print("1100");
                            hex += "1100";
                            break;
                        case 'D':
                            System.out.print("1101");
                            hex += "1110";
                            break;
                        case 'E':
                            System.out.print("1110");
                            hex += "1110";
                            break;
                        case 'F':
                            hex += "1111";
                            System.out.print("1111");
                            break;
                        default:
                            System.out.print("\nInvalid hexadecimal digit " + hexdec[c]);
                    }
                }
                System.out.println();
                return hex;
            }
    
            public static int binaryToDecimal(String binary) {
                int decimal = 0;
                for (int i = 1; i < binary.length()-1; i++) {
                        decimal += Math.pow(2, i-1) * (binary.charAt(binary.length()-i) - '0');
                }
                return decimal;
            }
    
            public static void main(String[] args) throws IOException {
                Scanner sc = new Scanner(new File("RAMerrors8x4c"));
                ArrayList<String> hexValues = new ArrayList<>();
                ArrayList<String> binaryValues = new ArrayList<>();
                while (sc.hasNext()) {
                    hexValues.add(sc.nextLine());
                }
                for (String hex : hexValues) {
                    String binary = hexToBinary(hex.toCharArray());
                    binaryValues.add(binary);
                    System.out.println(binary);
                }
                for (String binary : binaryValues) {
                    int decimal = binaryToDecimal(binary);
                    System.out.println(decimal);
                }
            }
        }
    }
    

    除了使用 Stringbuilder 之外,另一个想法可能是在 main 中完成所有二进制值的打印。 hexToBinary 返回字符串 - 如果需要,您可以在循环中打印它。

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 2011-09-04
      • 2016-08-28
      • 2013-07-25
      相关资源
      最近更新 更多