none
Crear variable float RRS feed

  • Pregunta

  • 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
    jueves, 26 de noviembre de 2009 12:03

Respuestas

  • Si hubieras dicho desde un principio que estabas en C++/CLI... 

    float f=entrada1[0]|(entrada1[1]<<8)|(entrada[2]<<16)|(entrada[3]<<24);

    Puede que tengas que poner moldeos varios. 



    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    • Marcado como respuesta Marodal jueves, 26 de noviembre de 2009 15:44
    jueves, 26 de noviembre de 2009 14:52
    Moderador

Todas las respuestas

  • 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'

    jueves, 26 de noviembre de 2009 14:19
  • Si hubieras dicho desde un principio que estabas en C++/CLI... 

    float f=entrada1[0]|(entrada1[1]<<8)|(entrada[2]<<16)|(entrada[3]<<24);

    Puede que tengas que poner moldeos varios. 



    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    • Marcado como respuesta Marodal jueves, 26 de noviembre de 2009 15:44
    jueves, 26 de noviembre de 2009 14:52
    Moderador
  • Muchisiimas gracias.
    Ahora a compilado, pero me ha dado un 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.

    jueves, 26 de noviembre de 2009 15:01
  • Solucionado, ademas de lo que me has dicho RFOG, he de hacer el casting a float.
    Gracias a todos los que habeis contestado.
    Un saludo, y otra medallita para RFOG
    jueves, 26 de noviembre de 2009 15:34
  • Vuelvo a abrir este post, puesto que la solucion que se dio no es la correcta.

    Todo compila correctamente, pero los valores que me muestra no son los correctos.

    Por ejemplo:

    Defino floatEntrada con cuatro posiciones.

    floatEntrada[0] = F4;

    floatEntrada[1] = FF;

    floatEntrada[2] = FF;

    floatEntrada[3] = 80;

    float valor = (float)(floatEntrada1[0]<<24|floatEntrada1[1]<<16|floatEntrada1[2]<<8|floatEntrada1[3]);

    y me sale el siguiente valor: 8,053061E+08, cuando realmente deberia salir en torno a 8, es decir, no un numero tan alto.

    Estoy representando los valores en una caja de texto, mediante valor.ToString(), pero eso no creo ke cambie el valor, ¿no?

    Por favor, necesito ayuda, stoy desesperadoooo!!!

    Muchas gracias!

    martes, 23 de marzo de 2010 15:39
  • Ya esta, por fin he encontrado la solucion.

    Debemos representar el array de caracteres de otra forma, y almacenarlo en memoria. A partir de ahi, hacemos el casting con el array desde memoria.

    Dejo el enlace al foro donde he encontrado la solucion, por si alguien lo necesita.

    http://www.codeproject.com/Messages/3359010/Reading-a-Float-from-memory.aspx

     

    Muchas gracias y un saludo

    martes, 23 de marzo de 2010 16:47