Estou convertendo String para Binário, seguindo alguns post aqui no grupo consegui fazer, mas ele faz errado, estou fazendo a conversão assim:
private String toBinary(String txt) {
String textEncript = "";
byte[] bytes = txt.getBytes();
String[] binarios = new String[bytes.length];
for (int i = 0; i < bytes.length; i++) {
textEncript += Integer.toBinaryString(bytes[i]);
}
return textEncript;
}
ele converte, mas se eu pegar esse binário e voltar para texto num conversor online, ele volta com caracteres estranhos sem falar que não converte na quantidade de bits certo, sempre vem com menos bits do que o esperado. Existe mais algum detalhes para essa conversão que eu não esteja fazendo?
Exemplo:
entro com a string abcdefgh (8 caracteres = 64 bits) depois de convertido ele retorna o binário:
11000011100010110001111001001100101110011011001111101000
que já não é mais 64 bits é só 56bits e se converter para texto retorna: ÃL¹³è
Tem vários erros aí colega:
1 - quem disse que cada caracter corresponde a 8 bits ? O método getByte() usa a codificação da plataforma em que o programa executa, e nem sempre os caracteres são codificados em 8 bits. No entanto, você pode “forçar” uma determinada codificação, por exemplo
str.getBytes("UTF-8")
2 - outro detalhe importante é o método toBinayString(). Esse método descarta os 0’s à esquerda, portanto você precisa formatar a String com campos de largura fixa:
String.format("%08d", Integer.parseInt(strBin));
2 curtidas
Código correto:
DEMO
public String ToBynaryString(String value) throws UnsupportedEncodingException
{
String result = "";
byte[] bytes = value.getBytes("UTF-8");
StringBuilder binary = new StringBuilder();
for (byte b : bytes)
{
int val = b;
for (int i = 0; i < 8; i++)
{
binary.append((val & 128) == 0 ? 0 : 1);
val <<= 1;
}
binary.append(' ');
}
return binary.toString();
}
Link referente e direitos autorais: http://stackoverflow.com/a/917190
1 curtida
Valeu mendes pelas dicas, realmente era o zero a esquerda que estava sendo eliminado por isso a diferença.