使用前导零将十六进制转换为二进制

时间:2015-08-24 15:33:33

标签: java binary hex

我遵循以下方法

{{1}}

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

,我需要64位输出

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

目标:使用前导零将十六进制转换为二进制

3 个答案:

答案 0 :(得分:7)

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

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

的字符
"0011000000110001001100100011001100110100001101010011011000110111"

答案 1 :(得分:1)

查看this question

您可以使用String.format()执行此操作:

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

答案 2 :(得分:1)

如果您的十六进制字符串总是16个字符,则以下内容可能是最简单的:

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