String contendo binários, transformar em decimal ou ascII

4 respostas
C

Tudo bom pessoal? sou novo aqui e no java também…

Então, estou fazendo a conversão de uma String para binário, uso uma StringBuffer para receber o código binario, escrevo um texto, por exemplo: “tentando”, minha string final fica
binario = 01110100 01100101 01101110 01110100 01100001 01101110 01100100 01101111 00100000

Pesquisando no forum e por outros sites, vi que o Integer.parseInt poderia fazer essa conversão para decimal e depois eu transformaria em ascII, só que no caso dos exemplos que vi, o binário de entrada é sempre de 8 bits, e no meu caso é uma palvra inteira, se eu entrar com a cadeia de binários acima, não vai dar. Então, como eu faço para ler de 8 em 8 bits e quando o resultado sair em decimal ficar assim: 116 101 110 116 97 110 100 111 32 ?? no caso eu teria que controlar no laço??

E será que tem como eu passar o binario lá de cima, direto para ascII formando a String de saida=“tentando”?

Desde já obrigado! lembrando, sou novo no assunto kkk

4 Respostas

P

É possível separar esses binários para transformálos em decimal assim

/* String to split. */
		String str = "01110100 01100101 01101110 01110100 01100001 01101110 01100100 01101111 00100000";

		String[] temp;

		/* delimiter */

		String delimiter = " ";

		/* given string will be split by the argument delimiter provided. */

		temp = str.split(delimiter);

		/* print substrings */

		for (int i = 0; i < temp.length; i++)
			System.out.println(temp[i]);
C

Opa! valeu pela resposta cara : D

Mas revirando aqui e vendo alguns exemplos consegui resolver, ficou assim:

"binario e saida" são StringBuffer
"binarios" um vetor de String

public void ConverterMSg_Binario(String mensagem){
   byte[] bytes = mensagem.getBytes();
   binarios = new String[bytes.length];
      
   System.out.println("Mensagem: " + mensagem);
   
   for (int i=0; i < bytes.length; i++) {
      binarios[i] = Integer.toBinaryString(bytes[i]);

     while (binarios[i].length() < 8) {
       binarios[i] = "0" + binarios[i];
     }
    }
   for (int i=0; i < binarios.length; i++) {
      binario.append(binarios[i]);
      binario.append(" ");
         
   }    
      System.out.println("Binários: " + binario);

    }
public void ConverterBinario_Msg(){
   for (int i=0; i < binarios.length; i++) { 
      saida.append((char)Integer.parseInt(binarios[i],2));
      }
      System.out.println("Mensagem: "+saida.toString());
 
   }

Mas aí surge outro problema.... caracters espeçiais `ç ´ ^
Alguém tem alguma idéia de como resolver esse problema?? porque se eu colocar algum caracter nesse código acima, por exemplo escrever "é", ele me gera 2bytes de 32bits cada.
Se alguém puder me ajudar... obrigado!

C

e ae pessoal, estou aqui de novo, consegui resolver meu problema achando um método que tranforma em binário…

//caracter é um tipo byte
for (int i = 0; i < 8; i++)
   {
    bina=bina+((caracter & 128) == 0 ? 0 : 1);
     caracter <<= 1;
    }

só que eu não entendi muito bem o que eles faz, alguém pode me explicar?
o que acontece no AND entre caracter e 128??
e o caracter <<=1? eles está deslocando 1 para a esquerda do bit?

no mais, minha dúvida é sobre o AND la em cima.
obrigado pessoal!

C

Ninguém?
Será que tem alguma a coisa a ver com a posição que o bit assume no byte?

Criado 19 de agosto de 2011
Ultima resposta 23 de ago. de 2011
Respostas 4
Participantes 2