我遵循以下方法
{{1}}
它工作得很好,但它删除了前导零。如果输入字符串为" 3031323334353637"
,我需要64位输出但它返回62个字符。我可以使用for循环来做到这一点。没有循环还有其他方法吗?
目标:使用前导零将十六进制转换为二进制
答案 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)
您可以使用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)