Foros del Web » Programación para mayores de 30 ;) » Java »

Capturar datos en hexadecimal del socket

Estas en el tema de Capturar datos en hexadecimal del socket en el foro de Java en Foros del Web. Hola he creado un servidor con sockets para recibir unos datos, el problema es que solo se como rebir la cadena en ascii, necesito la ...
  #1 (permalink)  
Antiguo 20/11/2010, 08:58
 
Fecha de Ingreso: marzo-2010
Mensajes: 6
Antigüedad: 14 años, 1 mes
Puntos: 0
Capturar datos en hexadecimal del socket

Hola he creado un servidor con sockets para recibir unos datos, el problema es que solo se como rebir la cadena en ascii, necesito la cadena en hexadecimal, he buscado algun ejemplo y solo encuentro en cadena de texto.

Gracias
  #2 (permalink)  
Antiguo 22/11/2010, 09:41
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Capturar datos en hexadecimal del socket

Hola:

Los números hexadecimales estan formados por los dígitos del 0 al 9 y las letras de la A a la F.
El ASCII incluye todos estos caracteres así q te sirve perfectamente.
Lee el número como si fuera una cadena de texto 'normal' (q lo es) y después conviértela a entero, long o lo q necesites.
Por ejemplo, si por el socket lees el texto "1FF" estas leyendo el número 511 en representación hexadecimal.


slds;

Nup_
  #3 (permalink)  
Antiguo 22/11/2010, 10:36
 
Fecha de Ingreso: marzo-2010
Mensajes: 6
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Capturar datos en hexadecimal del socket

El problema que tengo es que el cliente me envia los datos de esta forma:

1A1A 1A1A1A 1A 1A

entonces al recibirlo, y leerlo con el readline automaticamente me lo combierte a ascii, lo que quiero es recibir la cadena en hexadecimal para luego yo dividirla y convertirla.

No encuentro la forma de hacerlo.
Creo que se podria hacer leyendo byte a byte y guardarlo en una cadena.
¿Es esto posible?

Gracias
  #4 (permalink)  
Antiguo 22/11/2010, 11:34
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 3 meses
Puntos: 57
Respuesta: Capturar datos en hexadecimal del socket

Prueba esto:

Código Java:
Ver original
  1. public class ConvHex {
  2.     public static void main(String[] args) {
  3.         String valorHex = "1A";
  4.         int valorInt = Integer.parseInt(valorHex,16);
  5.         System.out.println("valorInt = " + valorInt);
  6.     }
  7. }

Si estas utilizando BufferedReader podrias utilizar la funcion read(char[] cbuf, int off, int len) para leer 2 caracteres de la entrada y guardarlos en un String. La funcion read seguramente esta disponible en otras clases

Última edición por posman; 22/11/2010 a las 12:19
  #5 (permalink)  
Antiguo 22/11/2010, 13:20
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Capturar datos en hexadecimal del socket

Ni el cliente ni el servidor reciben o envian "cadenas en hexadecimal", siempre se envían y se reciben bytes (bits, si me apuras). Otra cosa es a alto nivel como se interpreten esos datos.

Y leer datos binarios con Reader es un error, ya que este tipo de objetos está preparado para leer cadenas y tener en cuenta las diferencias de formato en las que se representan las cadenas en distintas plataformas, así que puede transformarlo. Y usar readLine, por ejemplo, puede devolvernos el mensaje entero en una cadena, puesto que en un fichero binario puede no aparecer nunca el caracter que represente un final de linea.

En fin, que para leer byte a byte, lo suyo es utilizar InputStream y derivados, casi siempre encapsulados por BufferedInputStream por rendimiento. Luego esos bytes los transformas en lo que quieras. Por ejemplo para pasar un array de bytes a valores hexadecimal, puedes usar cualquiera de las variantes propuestas en este post:

http://stackoverflow.com/questions/3...ile-keeping-le

Hay para escoger .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: hexadecimal, socket
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:22.