float f=123.456; //vble float (4 bytes)
unsigned char *v=new unsigned char[4]; //puntero a array uchar (4x1byte)
unsigned char *temp; //puntero a char
temp=(unsigned char*)&f;
// realmente es lo mismo un puntero a char, que a float, que a un tipo
// del usuario, no es mas que una direccion de memoria (es decir, un
// unsigned int, o 4 bytes en los PCs, pero hay q poner explicitamente
// el casting para que el compilador no grite
for (i=0;i<4;i++)
{ v[i]=*temp;
temp++;
}
// para volver a "montar" el float a partir del array:
float *f2;
f2=(float*)v;
// asi tendriamos los 4 bytes q representan el float en el array uchar
// este mismo procedimiento valdria para cualquier tipo de datos, solo
// hay q tener cuidado de saber los bytes q ocupa, por ejemplo un float
// en una arquitectura no PC puede tener distinto tamaño
// detalle final, hemos copiado cada uno de los bytes de f al array,
// porque si hubieramos hecho directamente: v=(unsigned char*)&f
// eso seria correcto, pero si ese codigo esta dentro de una funcion
// al acabar la funcion, v apuntaria a una direccion de memoria invalida
// puesto que lo que la vble f al estar declarada como estatica se
// ubicaria en el espacio de direcciones de la funcion que tras terminar
// su ejecucion se eliminaria de la memoria
// si f hubiera sido dinamica no pasaria nada porque donde realmente
// estaria el float seria en el heap con lo que no se perderia el float
// esto probablemente lo sabria la mayoria, pero por si alguien no lo
// veia del todo claro no estaba de mas aclararlo