SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => Otros CLR => Mensaje iniciado por: marodal en Jueves 26 de Noviembre de 2009, 12:58

Título: crear variable float
Publicado por: marodal en Jueves 26 de Noviembre de 2009, 12:58
Hola a todos
Tengo una aplicacion que recibe por el puerto serie datos de tipo char, de 8 bits.
Cada conjunto de 4 caracteres tienen que ser interpretados como un flotante.
¿Como podria crear el flotante a partir de esos 4 caracteres?

Por ejemplo:
recibo 0x32 0x21 0x34 0x23, y con esos 4 bytes debo crear el flotante para obtener un valor que debo representar en mi aplicacion.
Gracias por la atencion prestada
Un saludo
Título: Re: crear variable float
Publicado por: rfog en Jueves 26 de Noviembre de 2009, 13:08
Pon los cuatro bytes en una unión:

union Nombre
{
 unsigned char asByte[4];
float asFloat;
};

Luego escribe como si fueran bytes y lee como si fuera un float.

O lo mismo pero sin la unión:

unsigned char bytes[4];
float *f=(float *)bytes;
Título: Re: crear variable float
Publicado por: marodal en Jueves 26 de Noviembre de 2009, 15:19
Antes de nada, gracias por responder

He almacenado en un array de char las 4 variables char, que he llamado floatEntrada1;
Luego he creado un float de nombre entrada1, y he hecho lo siguiente:

entrada1 = (float)floatEntrada1;
y me ha dado el siguiente error de compilacion:
error C2440: 'type cast' : cannot convert from 'cli::array<Type> ^' to 'float'

¿Que es lo que ocurre?
Título: Re: crear variable float
Publicado por: Eternal Idol en Jueves 26 de Noviembre de 2009, 15:36
Eso no es C++.
Título: Re: crear variable float
Publicado por: marodal en Jueves 26 de Noviembre de 2009, 15:48
Se trata de Visual c++, 2008, ExpressEdition.
Estoy creando una aplicacion grafica, basandome en los formularios y controles que incorpora Visual c++ 2008.
LA verdad que incorpora tipos de datos propios.
Bueno, aunque no hayas usado Visual c++, podrias decirme como se haria la conversion en lenguaje c++ convencional??
Gracias
Título: Re: crear variable float
Publicado por: rfog en Jueves 26 de Noviembre de 2009, 16:00
Ya te lo he puesto yo en mi respuesta.

Y en los foros de Microsoft the he dado otra posible respuesta, y aun te voy a dar otra más:

Create una referencia a un float, inicialízala con gcnew, pinneala con pin_ptr y y escribe directamente sobre ella con desplazamientos.

Si la línea de arriba te suena a chino, antes de seguir, aprende C++/CLI.
Título: Re: crear variable float
Publicado por: marodal en Jueves 26 de Noviembre de 2009, 16:11
La respuesta que me distes en el foro de microsoft da el siguiente warning

warning C4244: '=' : conversion from 'int' to 'float', possible loss of data

¿Puede que haya perdido informacion? No me puedo permitir perderla, puesto que el valor de ese float ha de ser correcto para el uso que le voy a dar a mi aplicacion.

GRaciass!!
Título: Re: crear variable float
Publicado por: marodal en Jueves 26 de Noviembre de 2009, 16:33
Ya lo he conseguido.
FROG, Ademas de la solucion que me dijistes en el foro de msdn, habia que hacer el casting a float de toda la sentencia.
Muchas gracias.
En cuanto a tu ultimo comentario (que me parece un poco borde), he de decirte, que se C++, y por lo que he leido en tu blog, cualquier cosa que puedas hacer en C++, se puede implementar en Visual C++, asiq espero terminar mi trabajo con mis conocimientos de C++, y aprendiendo lo basico de C++/Cli.
Muchas Gracias por todo
SAludos
Título: Re: crear variable float
Publicado por: rfog en Jueves 26 de Noviembre de 2009, 16:43
Más que borde, bordísimo, je je.

Si quieres completarte en C++ en cuanto a tecnologías Microsoft, debes darle un tiento al C++/CLI.

Claro que se pueden mezclar ambos, pero hay restricciones en cuanto a la interoperación entre los datos nativos y manejados. Hazte cuenta de que hay dos pilas y dos montículos completamente independientes y que sólo los datos básicos son compatibles entre su mismo tipo (y lo que hace el runtime es irlos copiando de una pila a la otra). El mayor problema de interoperabilidad "total" es el recolector de basura del .NET, y en su momento dijeron que harían algo para mejorarla (como objetos proxy entre ambos) pero de momento no hay nada nuevo.