【发布时间】:2015-11-18 02:33:33
【问题描述】:
我遵循以下方法
new Biginteger(str,16).toString(2);
它工作得很好,但它删除了前导零。如果输入字符串是“3031323334353637”,我需要 64 位输出
但它返回 62 个字符。我可以使用 for 循环来做到这一点。没有循环还有其他方法吗?
目标:将十六进制转换为带前导零的二进制
【问题讨论】:
-
你不是说它会删除前导零吗?
我遵循以下方法
new Biginteger(str,16).toString(2);
它工作得很好,但它删除了前导零。如果输入字符串是“3031323334353637”,我需要 64 位输出
但它返回 62 个字符。我可以使用 for 循环来做到这一点。没有循环还有其他方法吗?
目标:将十六进制转换为带前导零的二进制
【问题讨论】:
您可以使用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)
【讨论】:
您可以使用String.format():
String unpaddedBinary = new BigInteger("a12", 16).toString(2);
String paddedBinary = String.format("%064s", Integer.parseInt(unpaddedBinary, 2));
【讨论】:
BigInteger.intValue 将BigInteger 转换为int。虽然如果它适合int,那么首先应该只使用int(而不是BigInteger),如果它不适合int,这将不起作用。