How to convert a float to a 4 byte char in C?

2019-04-08 08:48发布

问题:

I want to convert a float number for example 2.45 to the 4 byte char array. so the 2.45 should look like this '@' 'FS' 'Ì' 'Í' which is binary the ieee representation of 2.45 = 01000000 00011100 11001100 11001101?

I've solved the problem but it has a bad complexity. do you have any good ideas?

Thanks for the good answers.

can you please tell me the way back from the char array to the float number ?

回答1:

You have a few ways of doing this, including these two:

  1. Use typecasting and pointers:

    float f = 2.45;
    char *s = (char *) &f;
    

    Note that this isn't safe in any way and that there is no string terminator after the "string".

  2. Use a union:

    union u
    {
        float f;
        char s[sizeof float];
    };
    
    union u foo;
    foo.f = 2.45;
    

    The char array can now be accessed to get the byte values. Also note like the first alternative there is no string terminator.



回答2:

Just use memcpy:

#include <string.h>

float f = 2.45f;
char a[sizeof(float)];

memcpy(a, &f, sizeof(float));

If you require the opposite endianness then it is a trivial matter to reverse the bytes in a afterwards, e.g.

int i, j;

for (i = 0, j = sizeof(float) - 1; i < j; ++i, --j)
{
    char temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}