生成所有可能的8位二进制字符串

时间:2017-10-09 12:50:01

标签: java

我有一个形式密码的密钥" XY XY + 1 XY + 2 XY + 3 XY + 4 XY + 5 FF FF"其中XY是未知字节,例如,XY可以是00000000,因此XY + 1是00000001。 此外,FF是常数,所以总是11111111。

我有一个addBinary()方法,它只是为我给它的任何二进制字符串加1,但是,我发现很难生成所有二进制字符串组成" xxxx ... 11111111 11111111"

我还在StackOverflow上找到了这个printB()方法,它生成字符串,但不知道如何将FF硬编码到其中。

static void printB()
    {
        for(int i = 0; i < Math.pow(2,8); i++)
        {
            String format="%0"+8+"d";
            System.out.printf(format,Integer.valueOf(Integer.toBinaryString(i)));
            System.out.println();
        }
    }

任何有关如何生成此字符串的帮助都将不胜感激

2 个答案:

答案 0 :(得分:0)

如果你想让二进制数以0-s作为前缀,你必须做一些工作。这里我使用了一个填充了0的StringBuilder,从末尾替换了没有0填充的二进制表示。

for (int i = 0; i <= 0xFF; i++) {
    StringBuilder builder = new StringBuilder("00000000");
    String binary = Integer.toBinaryString(i);
    builder.replace(8 - binary.length(), 8, binary);
    System.out.println(builder);
}

答案 1 :(得分:0)

除格式化输出外,我建议不使用"1""0"的字符串。在内部你应该存储你的&#34;键&#34;作为byte[8],所以:

byte[] key = new byte[8];
for(int i=0; i<6; i++) {
   key[i] = (byte) x + i;
}
key[6] = (byte) 0xff;
key[7] = (byte) 0xff;

作为将此转换为可打印字符串的第一个镜头,您只需要:

String result = IntStream.range(0,8)
    .map(i -> key[i])
    .mapToObj(n -> intToBinaryString(n))
    .collect(Collectors.joining(" "));

...然后你需要一个intToBinaryString()方法。有很多SO答案描述了如何做到这一点 - 例如:Print an integer in binary format in Java