Question: I am doing some microcontroller programming in C. I am reading from various sensors 4 bytes that represent either `float`, `int` or `unsigned int`. Currently, I am storing them in `unsigned int` format in the microcontroller even though the data may be `float` since to a microcontroller they are just bytes. This data is then transferred to PC. I want the PC to interpret the *binary data* as a `float` or an `int` or an `unsigned int` whenever I wish. Is there a way to do that? 

Ex.

```
unsigned int value = 0x40040000; // This is 2.0625 in double
double result = convert_binary_to_double(value); // result = 2.0625

```

Thanks.

PS: I tried typecasting and that does not work.

Answer: 
The shortest way is to cast the address of the `float` (resp `int`) to the address of an `int` (resp `float`) and to dereference that: for instance, `double result = * (float*) &value;`. Your optimizing compiler may compile this code into something that does not work as you intended though (see [strict aliasing rules](http://mail-index.netbsd.org/tech-kern/2003/08/11/0001.html)).

A way that works more often is to use an union with an `int` field and a `float` field.
What do you mean by saying "type casting does not work"?
What exactly did you try?
For example, did you try something like this:

```
double convert_binary_to_double(unsigned int value)
{
    return *((double*)&value);
}

```