我有字符串char str [8]
。它以十六进制格式显示数字。它是浮动的并带有标志。如何将其写入float类型的变量?
例如:
char str[9] = "41700000\0";
我需要从中获取val:15.0
您可以查询数据:
unsigned int u = 0x41700000;
float f;
memcpy(&f, &u, sizeof(f));
printf("%f\n", f);
union un
{
float f;
unsigned u;
};
void foo(unsigned x)
{
union un a = {.u = x};
printf("%f\n", a.f);
}
我假设浮点数&&整数具有相同的大小。
当然,您必须将问题的字符串转换为无符号值-但这相对容易(scanf,atoi ....)
PS BTW,许多编译器将为两者生成完全相同的代码(无memcpy
调用] https://godbolt.org/z/VaCcxS
这是一种从十六进制4字节表示形式还原15的快速而肮脏的方法。但是,即使开始谈论它也有太多错误,正确的做法是问自己“为什么我需要这个,而我该如何做得更好”。
float hexStrToFloat(const char* str)
{
int tmp = 0;
sscanf_s(str, "%x", &tmp);
return(*(float*)&tmp);
}
脚注:假定为32位或更高的little-endian机器。