有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中获得整数的0填充二进制表示?

例如,对于1, 2, 128, 256,输出可以是(16位):

0000000000000001
0000000000000010
0000000010000000
0000000100000000

我试过了

String.format("%16s", Integer.toBinaryString(1));

它为左填充留出了空间:

`               1'

如何放置0作为填充。我在Formatter里找不到它。还有别的方法吗

p.S.this post描述了如何使用左0填充设置整数的格式,但它不适用于二进制表示


共 (6) 个答案

  1. # 1 楼答案

    java中没有内置二进制转换。util。格式化程序,我建议你要么使用字符串。replace将空格字符替换为零,如:

    String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0")
    

    或者实现自己的逻辑,将整数转换为二进制表示,并在thisso中给出的行中添加左填充。 或者,如果确实需要将数字传递到格式,可以将二进制表示形式转换为BigInteger,然后使用前导零对其进行格式设置,但这在运行时非常昂贵,如:

    String.format("%016d", new BigInteger(Integer.toBinaryString(1)))
    
  2. # 2 楼答案

    user3608934想法的一个更简单版本“这是一个老把戏,创建一个16 0的字符串,然后附加你得到的修剪过的二进制字符串”:

    private String toBinaryString32(int i) {
        String binaryWithOutLeading0 = Integer.toBinaryString(i);
        return "00000000000000000000000000000000"
                .substring(binaryWithOutLeading0.length())
                + binaryWithOutLeading0;
    }
    
  3. # 3 楼答案

    这里有一个旧帖子的新答案

    要用前导零将二进制值填充到特定长度,请尝试以下操作:

    Integer.toBinaryString( (1 << len) | val ).substring( 1 )
    

    如果len = 4val = 1

    Integer.toBinaryString( (1 << len) | val )
    

    返回字符串"10001",然后

    "10001".substring( 1 )
    

    丢弃第一个字符。所以我们得到了我们想要的:

    "0001"
    

    如果val很可能是阴性,那么尝试以下方法:

    Integer.toBinaryString( (1 << len) | (val & ((1 << len) - 1)) ).substring( 1 )
    
  4. # 4 楼答案

    我认为这是一个次优的解决方案,但你可以这样做

    String.format("%16s", Integer.toBinaryString(1)).replace(' ', '0')
    
  5. # 5 楼答案

    您可以使用Apache Commons StringUtils。它提供了填充字符串的方法:

    StringUtils.leftPad(Integer.toBinaryString(1), 16, '0');
    
  6. # 6 楼答案

    我尝试了各种各样的方法调用,我以前没有真正使用过这些方法来实现这一点,它们都取得了一定的成功,直到我想到了一个非常简单的方法,它可能会成功,而且成功了

    我相信这是以前考虑过的,不确定它对长字符串的二进制代码是否有用,但它对16位字符串很好。希望有帮助!!(注意,第二段代码得到了改进)

    String binString = Integer.toBinaryString(256);
      while (binString.length() < 16) {    //pad with 16 0's
            binString = "0" + binString;
      }
    

    多亏了威尔帮助改进了这个答案,使它在没有循环的情况下工作。 这可能有点笨拙,但它的工作,请改进和评论回来,如果你可以

    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;