6

我想将浮点数(例如 2.45)转换为 4 字节字符数组。所以 2.45 应该看起来像这样 '@' 'FS' 'Ì' 'Í',它是二进制的 ieee 表示2.45 = 01000000 00011100 11001100 11001101

我已经解决了这个问题,但它的复杂性很差。你有什么好主意吗?

谢谢你的好答案。

你能告诉我从 char 数组返回到浮点数的方法吗?

4

2 回答 2

13

只需使用 memcpy:

#include <string.h>

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

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

如果您需要相反的字节序,那么在之后反转字节是一件小事a,例如

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;
}
于 2013-08-16T10:17:50.237 回答
9

您有几种方法可以做到这一点,包括以下两种:

  1. 使用类型转换和指针:

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

    请注意,这在任何方面都不安全,并且“字符串”之后没有字符串终止符。

  2. 使用union

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

    现在可以访问 char 数组以获取字节值。另请注意,与第一个替代方案一样,没有字符串终止符。

于 2013-08-16T10:20:54.820 回答