Primero que nada un float no es un numero comun y corriente, CCS creo que usa lo mismo que MPLAB, ambos usan 24/32bits de float
Segun la IEEE 754 la representacion de un flotante de simple precision es :
1 bit de signo
8 bits de exponente
23 bits de mantisa
En ese orden, segun XC8/CCS que usan el mismo formato en 32 bits, suelen usar uno modificado que es de 24bits dado por
8 bits de exponente
1 bit de signo
15 bits de mantisa
Sin punteros pienso que tenes 2 opciones:
Una es usar una union
union _floatint {
float flotante;
short int array[4];
} datos;
main(){
datos.flotante = 0; // Pongo a 0 como si fuera un flotante a esos 4 bytes
datos.array[1] = 0x22; // Lo manejo como si fuera un array, ahora datos.flotante va a ser como vos queres 0x00220000
}
La otra que se me ocurre es:
float dato_float;
short int array[3];
main() {
dato_float = (float)(array[0]<<24 + array[1]<<16 + array[2]<<8)
}
Sino con punteros... pero veo que no te gusta.