我想将浮点数(例如 2.45)转换为 4 字节字符数组。所以 2.45 应该看起来像这样 '@' 'FS' 'Ì' 'Í'
,它是二进制的 ieee 表示2.45 = 01000000 00011100 11001100 11001101
?
我已经解决了这个问题,但它的复杂性很差。你有什么好主意吗?
谢谢你的好答案。
你能告诉我从 char 数组返回到浮点数的方法吗?
我想将浮点数(例如 2.45)转换为 4 字节字符数组。所以 2.45 应该看起来像这样 '@' 'FS' 'Ì' 'Í'
,它是二进制的 ieee 表示2.45 = 01000000 00011100 11001100 11001101
?
我已经解决了这个问题,但它的复杂性很差。你有什么好主意吗?
谢谢你的好答案。
你能告诉我从 char 数组返回到浮点数的方法吗?
只需使用 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;
}
您有几种方法可以做到这一点,包括以下两种:
使用类型转换和指针:
float f = 2.45;
char *s = (char *) &f;
请注意,这在任何方面都不安全,并且“字符串”之后没有字符串终止符。
使用union
:
union u
{
float f;
char s[sizeof float];
};
union u foo;
foo.f = 2.45;
现在可以访问 char 数组以获取字节值。另请注意,与第一个替代方案一样,没有字符串终止符。