Eu tenho uma matriz de 1s e 0s inteiros (possivelmente precisam ser convertidos em byte
tipo?). Eu tenho usado [um ASCII online para gerador de binário] [1] para obter o binário equivalente dessa seqüência carta de 6 dígitos:
abcdef
deve ser igual 011000010110001001100011011001000110010101100110
em binário.
Minha matriz é configurado como int[] curCheckArr = new int[48];
e minha string é, basicamente, apenas usando um StringBuilder
para construir os mesmos ints como cordas, e chamando toString()
- então eu tenho acesso ao código como uma string ou um array.
Eu tentei alguns métodos diferentes, todos os quais travar o navegador, incluindo:
StringBuilder curCheckAlphaSB = new StringBuilder(); // Some place to store the chars
Arrays.stream( // Create a Stream
curCheckString.split("(?<=\\G.{8})") // Splits the input string into 8-char-sections (Since a char has 8 bits = 1 byte)
).forEach(s -> // Go through each 8-char-section...
curCheckAlphaSB.append((char) Integer.parseInt(s, 2)) // ...and turn it into an int and then to a char
);
String curAlpha = curCheckAlphaSB.toString();
e
String curAlpha = "";
for (int b = 0; b < curCheckString.length()/8; b++) {
int a = Integer.parseInt(curAlpha.substring(8*b,(b+1)*8),2);
curAlpha += (char)(a);
}
Como posso mais eficientemente converter esses 48 1s e 0s a uma sequência de caracteres alfa de seis dígitos?
Assumindo que cada personagem é representado por precisamente um byte
pode iterar sobre a entrada com Integer.parseInt()
(porque byte
o valor na entrada é potencialmente sem sinal):
String input = "011000010110001001100011011001000110010101100110";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i += 8) {
int c = Integer.parseInt(input.substring(i, i + 8), 2);
sb.append((char) c);
}
System.out.println(sb); // abcdef