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

Java 将十六进制转换为带前导零的二进制,java,binary,hex,Java,Binary,Hex,我遵循下面的方法 new Biginteger(str,16).toString(2); 它工作得非常好,但它删除了前导零。如果输入字符串为“3031323334353637”,我需要64位的输出 但它返回62个字符。我可以使用for循环来实现这一点。有没有其他方法可以在没有循环的情况下做到这一点 目标:将十六进制转换为带前导零的二进制退出 您可以使用以下方法进行操作: 您可以使用String.format(“%64s”)填充空格,然后用零替换空格。它的优点是可以处理任意大小的输入,而不仅仅是

我遵循下面的方法

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”字符


如果十六进制字符串始终为16个字符,则以下可能是最简单的:


新的BigInteger(“1”+str,16).toString(2).substring(1)

它的输出是0000000000000000000000000000000000000000000000002578…肯定不正确…%064d”格式为十进制,不是二进制的…您也可以直接使用
biginger.intValue
biginger
转换为
int
。虽然如果它适合于
int
,人们可能首先应该使用
int
(而不是
biginger
),如果它不适合
int
,这将不起作用。@Dukeling哦,我的错,请参考,他的似乎是正确的。你的意思是它删除了前导零吗?谢谢。它起作用了。但我想了解你的解决方案。第一个stmt返回62个字符。在sec stmt中,创建宽度64和值存储在该64位中。在本例中,高阶位将有2个空格。它将被0替换。我说得对吗?请让我知道我已经添加了一些关于它如何工作的更多细节。。。。让我知道这是否有助于充分解释。谢谢男人:)我明白了
"  11000000110001001100100011001100110100001101010011011000110111"
"0011000000110001001100100011001100110100001101010011011000110111"