问题
例如,for1, 2, 128, 256输出可以是(16位):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
我试过了
String.format("%16s", Integer.toBinaryString(1));
它为左边填充放置空格:
` 1'
如何将0s用于填充。我在Formatter找不到它。还有另一种方法吗?
提前致谢。
P.1.this post描述了如何使用左0填充格式化整数,但它不适用于二进制表示。
#1 热门回答(159 赞)
我认为这是一个不理想的解决方案,但你可以做到
String.format("%16s", Integer.toBinaryString(1)).replace(' ', '0')
#2 热门回答(18 赞)
java.util.Formatter中没有构建二进制转换,我建议你使用String.replace将空格字符替换为零,如下所示:
String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0")
或者实现自己的逻辑,将整数转换为二进制表示,并在thisso中给出的位置添加左边距。或者,如果你确实需要将数字传递给格式化,则可以将二进制表示形式转换为BigInteger,然后使用前导零格式化,但这在运行时非常昂贵,如:
String.format("%016d", new BigInteger(Integer.toBinaryString(1)))
#3 热门回答(8 赞)
我正在尝试各种各样的方法调用,我之前没有真正使用它们,它们取得了适度的成功,直到我想到了一些非常简单的东西,它可能会起作用,而且确实如此!
我确信之前已经考虑过,不确定它对于长字符串二进制代码是否有用,但它适用于16Bit字符串。希望能帮助到你!! (注意第二段代码得到改进)
String binString = Integer.toBinaryString(256);
while (binString.length() < 16) { //pad with 16 0's
binString = "0" + binString;
}
感谢Will帮助改进这个答案,让它在循环中工作。这可能有点笨拙但它有效,如果可以,请改进并评论....
binString = Integer.toBinaryString(256);
int length = 16 - binString.length();
char[] padArray = new char[length];
Arrays.fill(padArray, '0');
String padString = new String(padArray);
binString = padString + binString;