【问题标题】:How to convert Hex String to binary string with leading zeros?如何将十六进制字符串转换为带有前导零的二进制字符串?
【发布时间】:2016-02-18 11:06:25
【问题描述】:

假设我有一个十六进制字符串0F0A。我需要输出为0000111100001010。我尝试了以下方法,但这会返回 111100001010 - 我还需要前导 0000

public static String hexToBinary(String hex) {
    return new BigInteger(hex, 16).toString(2);
}

【问题讨论】:

标签: java


【解决方案1】:

你快到了...只需要格式化它:

   String string = "0f0a";
   String value = new BigInteger(string, 16).toString(2);
   String formatPad = "%" + (string.length() * 4) + "s";
   System.out.println(String.format(formatPad, value).replace(" ", "0"));

formatPad 是填充器(每个十六进制符号 4 位)...在您的情况下 16

【讨论】:

  • 如果他事先不知道他的输入字符串有多长怎么办?
  • 好的,感谢您的演示。我不认为初学者总是意识到他们可以计算格式字符串。我强烈建议您将string.length() * 4 放在括号中。因为+ 是字符串连接,* 是算术乘法,所以你真的不应该在没有括号的情况下将这两种类型组合在同一个表达式中;我经常看到String1 + number + 1String1 + number - 1 之类的东西,这是行不通的。由于运算符优先级,您的将起作用,但没有括号会有点混乱。
【解决方案2】:

试试这个代码:

String hexToBinary(String hexString) {
    int i = Integer.parseInt(hexString, 16);
    String binaryString = Integer.toBinaryString(i);
    String padded = String.format("%8s", Integer.toBinaryString(i)).replace(' ', '0') 
    return padded;
}

【讨论】:

  • 如果他的输入太大而无法放入Integer? OP 没有说明他的输入字符串可以有多长。而且你的代码不会在他指定的输入上给他想要的输出——你试过了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2014-08-03
  • 2019-08-23
  • 1970-01-01
  • 2017-02-23
  • 2014-08-03
相关资源
最近更新 更多