【问题标题】:Generating all possible 8 bit binary Strings生成所有可能的 8 位二进制字符串
【发布时间】:2017-10-09 12:50:00
【问题描述】:

我有一个密码密钥,格式为“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();
        }
    }

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

【问题讨论】:

  • 不清楚你在这里问什么。你想要一个assertEquals(makeString(0b10), "00000010 00000011 00000100 00000101 00000110 00000111 11111111 11111111")这样的方法吗?
  • 您的第一段没有说明为什么要为所有 256 个 8 位数字生成字符串。
  • 所有 8 位二进制文​​件都是通过从 0000 0000 开始,然后反复添加 1 获得的。例如,可以在 StackOverflow 上找到 here 的按位加法。或者将Integer2radix 一起使用(如果性能不那么重要),如SO 中的here 所示。这种方法允许您简单地执行value++

标签: java


【解决方案1】:

如果你想让二进制数以 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);
}

【讨论】:

    【解决方案2】:

    我建议不要使用 "1""0" 的字符串,除了格式化输出。在内部,您应该将“密钥”存储为 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

    【讨论】:

    • 我将“key”放在引号中,因为我真的希望这不会被用于严肃的加密。它有 64 位长,但它只包含 8 位信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多