Lo que necesitas es reconvertirlos en float , antes de imprimirlos, se me ocurre que hagas esto, tal como los recibes, los buelcas sobre las posiciones de una variable float, que ayas definido previamente , por ejemplo.
float Numero=0;/// definimos la variable a presentar
#LOCATE Numero=00H;/// la alojamos en una dirección definida;
unsigned char A,B,C,D;// estos son los bytes a recibir.
#asm /// lo ago en ensablador porque en C no se
movlw A;// volcamos los valores en la posicion de memoria del float
movwf 03H;
movlw B;
movwf 02H;
movlw C;
movwf 01H;
movlw D;
movwf 00H;///// recordemos que es litle endian
#endasm
y despues ya lo presentas de forma normal.
en cuanto a lo del valor enviado, depende de la aplicación. si tu envías el valor en exadecimal. lo recibe así, pero si el programa solo envía ascii, no podrás recibirlo. pues te enviara lo que quiera.
Si he dicho muchas tonterias lo siento, yo solo quiero ayudar.