转换二进制和十六进制没有内置函数

时间:2014-01-30 05:44:44

标签: java binary hex

我正在努力在我的java程序中转换二进制和十六进制。我能够读取一个二进制数,但如果我输入更多,程序只读取最后一个二进制数并将其转换为十六进制数。如何读取长二进制数并将其转换为十六进制?喜欢101000011010    这是我的代码的一部分。感谢。

public String binToHex() {
    String hex[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
    String binary[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001",
            "1010", "1011", "1100", "1101", "1110", "1111"};
    String result = " ";

    Scanner num = new Scanner(System.in);
    String userInput = num.next();
    System.out.println("You entered " + userInput);


    for(int i=0; i < userInput.length(); i++) {
        if (!userInput.isEmpty()) {
            ///System.out.print("not empty");
            temp = userInput.substring(i);
        }
        //System.out.print("temp: " + temp);
        String temp2 = ""+temp+"";
        //System.out.println("temp2 " + temp2);

        for(int j=0; j < binary.length; j++) {
            if(temp2.equals(binary[j])) {
                //System.out.print("inside if");
                result = result + hex[j];
                //System.out.println("results: " + result);
            }
        }
    }
    System.out.println("Hex:" + result);
    return result;
}

2 个答案:

答案 0 :(得分:0)

你的逻辑关闭了这个程序。对于输入到输入中的每个字符,您都在运行外部for循环。如果您输入一个12位二进制数字,就像您提到的那样101000011010,则循环运行12次。

在该循环中,您检查输入是否为空。它不是,因此它将temp设置为101000011010。然后你设置一个无意义的temp2值(temp就足够了)等于temp。所以现在temp和temp2都等于输入101000011010

现在,您检查该值...(整个12位二进制字符串)101000011010,其中包含二进制数组中的每个值。显然,你的数组中没有12位二进制输入,所以结果什么也没做。

回到外部for循环,然后在那里设置temp等于从索引1开始的12位数字符串.IE现在你已经使temp等于11位二进制数01000011010(缺少第一个'1'。

并且它重复这一点,将这些冗长的字符串与数组进行比较,并且找不到匹配,直到你向传递4位数字的末尾开始。

由于您的二进制数组仅包含4位数字,因此唯一可以匹配任何内容的数字最后是4位二进制数。 IE A

循环实际上在找到A之后运行了几次,但又匹配了一个3位数字,然后是2位数字,1位数字等,而且这些都不在二进制数组中。

我建议尝试一种新方法。

答案 1 :(得分:0)

你可以做这样的事情

  public static void main(String[] args)
  {
    String hex[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
    String binary[] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011",
        "1100", "1101", "1110", "1111" };
    String result = " ";
    boolean containcharacterOtherthan1or0 = false;
    System.out.println("enter the number :");
    Scanner num = new Scanner(System.in);
    String userInput = num.next();
    System.out.println("You entered " + userInput);
    for (int k = 0; k < userInput.length(); k++)
    {
      if (!String.valueOf(userInput.charAt(k)).equals("0") && !String.valueOf(userInput.charAt(k)).equals("1"))
        containcharacterOtherthan1or0 = true;
    }
    if (userInput.length() % 4 == 0 && !containcharacterOtherthan1or0)
    {

      for (int i = 0; i < userInput.length(); i = i + 4)
      {
        for (int j = 0; j < binary.length; j++)
        {
          if (binary[j].equals(userInput.substring(i, i + 4)))
          {
            result += hex[j];
          }
        }

      }

      System.out.println("the result is :" + result);
    }
    else
    {
      System.out.println("enter a binary number with length of muliplier of 4 ");
    }

  }