将十六进制转换为二进制-Java

时间:2018-11-07 04:53:41

标签: java

我正在尝试从十六进制转换为二进制。我已经有了将十进制转换为二进制的代码,只是不知道如何从那里转换为二进制。

public static String hexToDec (String valueIn){

int endNum = 0;

for (int i = 0; i < valueIn.length(); i++){         
    char curDigit = valueIn.charAt(i);
    endNum *= 16;     

    if (curDigit >= 'A' && curDigit <= 'F')      
        endNum += 10 + (curDigit - 'A');

    else 
        endNum += curDigit - '0';
    }
    return "" + endNum;
}


 public static void main(String[] args) {
    Scanner keyboard = new Scanner (System.in);
    System.out.println("Please enter the decimal number: ");
    String valueIn = keyboard.nextLine ();
    String outputOut = hexToDec(valueIn);
    System.out.println ("The output is: " +outputOut);    
}

public static String decimalToBinary(int valueIn){

  int remainder, i = 0;
   String binaryNum ="";
  while (valueIn != 0){
    remainder = valueIn % 2;
    valueIn /= 2;
    binaryNum = remainder+binaryNum;
  }
 return binaryNum;
}
public static void main(String[] args) {

Scanner keyboard = new Scanner (System.in);
System.out.println("Please enter the decimal number: ");
int valueIn = keyboard.nextInt ();
String outputOut = decimalToBinary(valueIn);
System.out.println ("The output is: " +outputOut);    
}

3 个答案:

答案 0 :(得分:2)

您可以简单地定义自己的映射,并根据注释完全跳过十进制转换路径。

HashMap<char, String> mapping = new HashMap<char, String>();
mapping.put('0', "0000" );
mapping.put('1', "0001" );
mapping.put('2', "0010");
mapping.put('3', "0011");
mapping.put('4', "0100" );
mapping.put('5', "0101");
mapping.put('6', "0110");
mapping.put('7', "0111");
mapping.put('8', "1000");
mapping.put('9', "1001");
mapping.put('a', "1010");
mapping.put('b', "1011");
mapping.put('c', "1100");
mapping.put('d', "1101");
mapping.put('e', "1110");
mapping.put('f', "1111");

然后可以执行以下操作:

String hexValue = "something";
StringBuilder result = new StringBuilder();
for (char c : hexValue) {
    // need to do some error checking here.
    result.append(mapping[Character.toLowerCase(c)]);
}

System.out.prinltn(result.ToString());

答案 1 :(得分:0)

虽然我不想在您当前的方法之间打断,但从评论中我会说,要将十进制转换为二进制,您要做的就是一次又一次地获得数字的模数,并且然后以相反的顺序组合所有这些以获得您的二进制数。

这将是一个更长的方法,所以我想您可能会从下面的代码中汲取灵感。

BigInteger.toString(radix)将做您想要的。只需输入2的基数即可。了解有关here.

的更多信息
static String hexToBin(String s) {
  return new BigInteger(s, 16).toString(2);
}

BigInteger确保大量数字在转换期间不会出现问题,但是您也可以在下面使用此代码,这个简单的标志确实使您对转换的理解更好。

String hexToBinary(String hex) {
    int i = Integer.parseInt(hex, 16);
    String bin = Integer.toBinaryString(i);
    return bin;
}

答案 2 :(得分:0)

作为一个例子。

什么是4B5(十六进制)?

  • “ 4”位于“ 16×16”位置,因此表示4×16×16

  • “ B”(11)处于“ 16”位置,表示11×16

  • “ 5”位于“ 1”位置,表示5。

答案:小数点后4B5 = 4×16×16 + 11×16 + 5(= 1205)

然后将十进制数转换为二进制数。

如何将小数转换为二进制

转换步骤:

  • 将数字除以2。
  • 获取下一次迭代的整数商。
  • 获取其余的二进制数字。
  • 重复这些步骤,直到商等于0。

(1205) in Decimal= (10010110101) in Binary.

尝试实现这一点。