Tengo una serie de 1s y 0s enteros (posiblemente necesita para obtener convertido al byte
tipo?). He utilizado [ASCII en línea al generador binario] [1] para obtener el equivalente binario de esta secuencia de letras 6 dígitos:
abcdef
debe ser igual 011000010110001001100011011001000110010101100110
en binario.
Mi matriz se configura como int[] curCheckArr = new int[48];
y mi cadena es, básicamente, sólo utiliza una StringBuilder
para construir los mismos enteros como cadenas, y llamando toString()
- así que no tengo acceso al código como una cadena o una matriz.
He intentado algunos métodos diferentes, todos los cuales bloquean el navegador, incluyendo:
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();
y
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);
}
¿Cómo puedo convertir más eficientemente estos 48 1s y 0s a una secuencia de caracteres alfabéticos de seis dígitos?
Suponiendo que cada personaje está representado por, precisamente, uno byte
puede iterar sobre la entrada con Integer.parseInt()
(porque byte
el valor de la entrada es potencialmente sin firmar):
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