Saltar para conteúdo


Foto
- - - - -

Converter em binário


  • Por favor inicie sessão para responder
10 respostas a este tópico

#1 Mobilus

Mobilus

    Membro

  • Membros
  • PipPip
  • 12 mensagens

Mensagem publicada 10 December 2010 - 18:35

Boas a todos,Existe alguma forma de transformar uma string/int/float em formato binário?O objectivo é enviar dados em formato binário através da porta UDP, tudo funciona perfeitamente em plain text mas para o protocolo que estou a usar a informação tem de ser enviada em modo binário o problema é que não consigo encontrar nada na documentação que me ajude.Desde já obrigado

#2 MetalWeirdo

MetalWeirdo

    era uma vez um pato

  • Former Staff
  • PipPipPip
  • 495 mensagens

Mensagem publicada 10 December 2010 - 19:41

eu não entendo nada de JAVA, mas se não existir, faz tu uma função a passar para modo binário =\

#3 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 13 December 2010 - 11:02

Define "binário", é que todos esses formatos já são binários. Portanto, só tens mesmo dos enviar tal como são e "agarra-los" tendo em conta o que são (string/int/float/whatever).

#4 maxado

maxado

    Fã de Android

  • Membros
  • PipPipPip
  • 389 mensagens

Mensagem publicada 13 December 2010 - 14:40

Queres usar Bytebuffer certo? Esse binario que falas está relacionado como são enviados os dados, se assim for, se calhar usares bytebuffer pode-te ajudar...Se percebi bem o que pretendes...

#5 Mobilus

Mobilus

    Membro

  • Membros
  • PipPip
  • 12 mensagens

Mensagem publicada 30 December 2010 - 02:54

Passado 2 semanas é que vi as vossas respostas desculpem, é o que dá não ter a thread subscrita :SAnteriormente tinha:
DatagramSocket theSocket = new DatagramSocket();byte[] buf = (tuiostack).getBytes();DatagramPacket packet = new DatagramPacket(buf, buf.length, serverAddr, port);theSocket.send(packet);
Resultado na consola vejo o resultado em plain text e nada encoded, byte[] buf = (tuiostack).getBytes(); não é suposto aqui acontecer algum tipo de encode?Experimentei depois com a dica do maxado usando o ByteBuffer que resultou numa coisa do género:
DatagramChannel channel = DatagramChannel.open();ByteBuffer buffer = ByteBuffer.wrap("test string".getBytes());channel.send(buffer, new InetSocketAddress("192.168.1.95", 3000));
O resultado é exactamente o mesmo recebo os dados em plain text.Provavelmente não me expliquei bem e francamente acho que não me consigo explicar melhor, noobice e provavelmente areia de mais para o meu camião :SJunto vai um screenshot de como queria que os dados fossem enviados uma vez que são chars especiais e não dão para colar aqui.[attachment=1516]binary.png[/attachment]

#6 pedronveloso

pedronveloso

    Veloso

  • Administradores
  • 1578 mensagens
  • S8

Mensagem publicada 30 December 2010 - 11:18

Isso é porque estás a tentar interpretar o binário. Tudo o que vês, Strings, Floats, etc , já são binários tal como disse o r3pek. Podes tentar ler um conjunto de zeros e uns como uma string, quando deverias ler apenas os zeros e uns, que penso que é o erro que estás a cometer. Ao imprimires para o ecrã estás a forçar a transformação em String, que dependendo do encoding, vai agrupar os bits de 7 em 7, 8 em 8, etc e tentar representar as respectivas letras, daí obteres esses "caracteres estranhos".

#7 Mobilus

Mobilus

    Membro

  • Membros
  • PipPip
  • 12 mensagens

Mensagem publicada 30 December 2010 - 19:54

Gracias pedronveloso, esses caracteres estranhos são exactamente o que queria conseguir e não consigo, sempre que imprimo para o ecrã com qualquer uma das técnicas que mencionei acima ... é sempre impresso como plain text.Estou me a basear no protocolo OSC http://opensoundcont...rg/spec-1_0Aqui é dito:"An OSC packet consists of its contents, a contiguous block of binary data, and its size, the number of 8-bit bytes that comprise the contents. The size of an OSC packet is always a multiple of 4."A minha questão (e acho que cada vez estou a ficar mais confuso) é, como forço eu a impressão de uma qq string, int ou float encoded em binario?

#8 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 30 December 2010 - 20:53

Gracias pedronveloso esses caracteres estranhos são exactamente o que queria conseguir e não consigo, sempre que imprimo para o ecrã com qualquer uma das técnicas que mencionei acima ... é sempre impresso como plain text.Estou me a basear no protocolo OSC http://opensoundcont...rg/spec-1_0Aqui é dito:"An OSC packet consists of its contents, a contiguous block of binary data, and its size, the number of 8-bit bytes that comprise the contents. The size of an OSC packet is always a multiple of 4."A minha questão (e acho que cada vez estou a ficar mais confuso) é, como forço eu a impressão de uma qq string, int ou float encoded em binario?

Ainda não percebi exactamente o que queres. Queres que um 'A' apareça como 01000001 ou como uma caracter esquisito?!

#9 Mobilus

Mobilus

    Membro

  • Membros
  • PipPip
  • 12 mensagens

Mensagem publicada 30 December 2010 - 20:55

Quero que apareça como um caracter esquisito como o da imagem ;)[attachment=1516]binary.png[/attachment]

#10 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 30 December 2010 - 21:07

Quero que apareça como um caracter esquisito como o da imagem ;)[attachment=1516]binary.png[/attachment]

Nunca o vais conseguir... um 'A' é sempre um 'A'... por mais formas que dês, a não ser que o transformes noutra coisa ele vai ser sempre um 'A', é a representação ASCII do decimal 65. a não ser que convertas um 65 num caracter "não representavel" ele vai-te sempre aparecer assim escrito.

#11 Mobilus

Mobilus

    Membro

  • Membros
  • PipPip
  • 12 mensagens

Mensagem publicada 31 December 2010 - 02:15

Hummm....tem de dar até porque fazendo o mesmo dump para a linha de comandos, numa determinada porta udp, usando uma aplicação do mesmo tipo para desktop eu vejo esses caracteres a serem mostrados, no caso não com 'A' mas com float's e int's (que são representadas por esses caracteres estranhos). Aliás foi depois de ter feito esse "dump" que me apercebi que para trabalhar com o protocolo certas partes do bundle OSC têm de ser enviadas encoded em binário.Eu vou investigar melhor o caso e tentar entender realmente o que se tem de fazer para funcionar com o protocolo (acho que eu é que devo estar a fazer uma confusão enorme...noo(a)bice),se chegar a alguma conclusão/solução posto aqui.