C/Visual C - Conversion entre tipo de datos

 
Vista:

Conversion entre tipo de datos

Publicado por juanfra (1 intervención) el 10/12/2009 15:11:09
Hola a todos!!

Me estoy volviendo loco con un tema de conversion entre tipos de datos.

Resulta que tengo dos aplicaciones. Una envia datos por un socket y la otra los recibe.

La aplicacion que envía datos, envía en formato decimal abarcando tamaños desde bytes a dword, pero la función de leer del socket devuelve los datos leidos en formato char y cuando quiero tratar esos datos y de alguna forma reconvertirlos de nuevo a decimales. . . no soy capaz !!!

No entiendo que pasa.

He probado con multitud de funciones de de mil frmas diferentes, con strncpy, strcat, memcpy, sprintf. . . .

El problema es que un valor decimal de 90 en un INT del dispositivo de envío, se traduce a tres cifras. el primer byte = 90 y el segundo byte = 0. Si esto lo recuperamos con la funcion "read" de leer del socket, tenemos un string de 3 caracteres, que a efectos de memoria son 3 bytes.

No se si me explico pero me estoy volviendo loco!!! lo pero es que soy capaz de visualizar los valores y de ver donde está cada uno de los valores que me envían , pero no se convertirlos !!!!

Alguien me podría ayudar ??

Gracias !!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Conversion entre tipo de datos

Publicado por Capitan Kirk (97 intervenciones) el 10/12/2009 20:55:42
Por lo que veo, no tienes problemas en el envío y recepción de los datos. El receptor recibe caracteres (bytes), y el problema es leerlo en su formato original. Es más engorroso que difícil, el único tema es saber el tipo de dato que se ha enviado. Me explico:

En el ejemplo que das, envías un INT (parece que es un entero de 16 bits, 2 bytes) que vale 90. Internamente, este valor sería 00 90, pero los procesadores INTEL guardan primero el byte menos significativo, por lo que se almacena como 90 00, que es lo que ha leído el receptor.

Con los valores numéricos te mandará los bytes en orden inverso (2 bytes para short y unsigned short, 4 bytes para long, unsigned long y float, 8 bytes para double) (el tamaño del tipo int depende del compilador, pero creo que todos los compiladores modernos emplean un int de 4 bytes). Cuidado, no confundas un vaklor numérico con una cadena literal que se corresponda con un número.
Las cadenas de caracteres te las mandará tal cual (sin cambiar el orden).

Si los dos programas (el emisor y el receptor) son tuyos, diséñalos de modo que la transmisión y recepción se hagan a tu gusto. Si solamente es tuyo uno de ellos, tendrás que diseñarlo de forma que tenga en cuenta la forma de funcionar del otro. En cualquier caso, necesitas conocer qué se ha enviado y en qué orden para procesarlo correctamente en la recepción.

Prueba con algo parecido a esto:

char Buffer[1000]; // Buffer de recepcion
char *ptr;
short s;
int i;
// ....
// Apunto al primer elemento del buffer
ptr = Buffer;
// Leo un entero de 2 bytes y apunto al siguiente byte del buffer
s = (short)*ptr;
ptr += sizeof(short);
// Leo un entero de 4 bytes y apunto al siguiente byte del buffer
i = (int)*ptr;
ptr += sizeof(int);

Como ya te he dicho, debes conocer qué se ha enviado y en qué orden. Si tienes alguna otra duda, ya sabes dónde estamos.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conversion entre tipo de datos

Publicado por juanfra (1 intervención) el 10/12/2009 22:23:01
Hola!!

Gracias por tu ayuda!!! Ya he conseguido lo que quería!!

Era más fácil de lo que parecía. El problema lo tenía en los malditos strings. Son enrevesados para manejarlos y entenderlos.

Si que es cierto que el orden de los bytes venía cambiado, con lo cual se me descuadraba todo.

Al final he tenido que ir byte por byte y con la ayuda un conversor entre formatos he conseguido ir descifrando que es lo que mandaba el emisor y como lo enviaba.

En fin, muchísimas gracias por tu ayuda. El codigo que me has colgado me ha sido muy util.

Espero poder ayudarte en otra ocasión.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conversion entre tipo de datos

Publicado por Maggy (1 intervención) el 05/02/2010 15:33:42
Puedes ayudarme con el codigo de conversion de datos por favor es urgente gracias!!!!!!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar