簡體   English   中英

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

[英]Generating all possible 8 bit binary Strings

我有一個密碼密鑰,格式為“ 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();
        }
    }

任何有關如何生成此字符串的幫助將不勝感激

如果您想要二進制數字以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" 在內部,您應該將“密鑰”存儲為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答案描述了如何執行此操作-例如: 在Java中以二進制格式打印整數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM