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: 
Keeping in mind that what you're asking for isn't entirely portable, something like this will probably do the job:

```
float value = *(float *)&bits;

```

The other obvious possibility is to use a union:

```
typedef union { 
    unsigned int uint_val;
    int          int_val;
    float        float_val;
} values;

values v;
v.uint_val = 0x40040000;
float f = v.float_val;

```

Either will probably work fine, but neither guarantees portability.
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);
}

```