Hola!
Estoy trabajando con el USB transmitiendo datos del pic al ordenador. En el pic hago unos calculos donde el resultado lo almaceno en un float. El caso es que necesto enviar ese float a un ordenador por USB.
Trabajando con el USB he de enviar los datos en arrays de bytes, por lo que tengo que descomponer el float en 4 bytes y enviarlos.
Lo hago de la siguiente forma:
union dato {
char array[4];
float valorcito;
}convertor;
convertor.valorcito = 187.51;
printf(lcd_putc,"\f%f\n%x %x %x %x",convertor.valorcito,convertor.array[0],convertor.array[1],convertor.array[2],convertor.array[3]);
Antes de enviarlo lo muestgro en un display, obteniendo en el display:
187.51
86 3b 82 8f
Hasta aqui todo correcto.
En el ordenador estoy programando con Borland c++ una pequeña aplicacion, en la cual recibo los 4 bytes correctamente, pero el float no lo formaba bien aun haciendo lo mismo y me he dado cuenta de esta pequeña cosa. Si en el odenador hago lo mismo:
union dato {
char array[4];
float valorcito;
}convertor;
convertor.valorcito = 187.51;
printf("\f%f\n%x %x %x %x",convertor.valorcito,convertor.array[0],convertor.array[1],convertor.array[2],convertor.array[3]);
Por consola obtengo lo siguiente:
187.51
8f 82 3b 43
La representacion es al reves, cosa logica si indagais un poco ya que en un ordenador se hace al reves. Pero lo curioso es que el ultimo numero no es igual, y eso varia mucho, ya que al pasarlo a float, cuando recibo el que me envia el PIC difiere mucho del que interpreta el ordenador, ¿Alguien sabe a que es debido?
Saludos, Juan