将十六进制转换为带有前导零的二进制

Converting hex to binary with leading zeros

我按照下面的方法

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

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

,我需要 64 位输出

但是它returns62个字符。我可以使用 for 循环来做到这一点。有没有其他不用循环的方法?

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

查看 this question

您可以使用 String.format():

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

您可以使用 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"

以下可能是最简单的:

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