【问题标题】:Converting hex to binary with leading zeros使用前导零将十六进制转换为二进制
【发布时间】:2015-11-18 02:33:33
【问题描述】:

我遵循以下方法

new Biginteger(str,16).toString(2);

它工作得很好,但它删除了前导零。如果输入字符串是“3031323334353637”,我需要 64 位输出

但它返回 62 个字符。我可以使用 for 循环来做到这一点。没有循环还有其他方法吗?

目标:将十六进制转换为带前导零的二进制

【问题讨论】:

  • 你不是说它会删除前导零吗?

标签: java binary hex


【解决方案1】:

您可以使用String.format("%64s") 填充空格,然后用零替换空格。这具有适用于任何大小的输入的优点,而不仅仅是 int 范围内的输入。我猜你正在处理使用 BigInteger 的任意输入......

String value = new BigInteger("3031323334353637", 16).toString(2);
System.out.println(String.format("%64s", value).replace(" ", "0"));

输出

0011000000110001001100100011001100110100001101010011011000110111

说明... String.format("%64s, value) 输出前面的字符串填充以填充 64 个字符。

"  11000000110001001100100011001100110100001101010011011000110111"

然后使用 String.replace(oldString, newString) 将前导空格替换为“0”字符

"0011000000110001001100100011001100110100001101010011011000110111"

【讨论】:

  • 谢谢。有用。但我试图了解您的解决方案。第一个 stmt 返回 62 个字符。在 sec stmt 中,创建宽度 64 并将值存储在该 64 位中。在此示例中,高位将有 2 个空格。它被 0 替换。我说的对吗?请告诉我
  • 我已经添加了一些关于它如何工作的更多细节......如果这有助于完全解释它,请告诉我。
  • 谢谢大佬 :) 我明白了
【解决方案2】:

以下可能是最简单的:

new BigInteger("1" + str,16).toString(2).substring(1)

【讨论】:

  • 虽然是个 hack,但非常天才!
  • 顺便说一句,它适用于所有长度。基数是 16,而不是长度。
  • 你是对的。我会更新答案。
【解决方案3】:

查看this question

您可以使用String.format()

String unpaddedBinary = new BigInteger("a12", 16).toString(2);
String paddedBinary = String.format("%064s", Integer.parseInt(unpaddedBinary, 2));

【讨论】:

  • 它的输出是 0000000000000000000000000000000000000000000000000000000000002578...肯定不正确... %064d" 格式为十进制,而不是二进制...
  • 您也可以直接使用BigInteger.intValueBigInteger 转换为int。虽然如果它适合int,那么首先应该只使用int(而不是BigInteger),如果它不适合int,这将不起作用。
  • @Dukeling 哦,我的错,请参考Adam's answer,他的似乎是正确的。
猜你喜欢
  • 2015-03-09
  • 2012-06-26
  • 2013-04-01
  • 2016-08-28
  • 2013-07-25
相关资源
最近更新 更多