以十六进制格式获取浮点数

问题描述 投票:-1回答:2

我有字符串char str [8]。它以十六进制格式显示数字。它是浮动的并带有标志。如何将其写入float类型的变量?

例如:

char str[9] = "41700000\0";

我需要从中获取val:15.0

c floating-point hex
2个回答
1
投票

您可以查询数据:

  1. 使用memcpy
unsigned int u = 0x41700000;
float f;

memcpy(&f, &u, sizeof(f));
printf("%f\n", f);
  1. 使用联盟(IMO法律,许多人有相反的意见)
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


0
投票

这是一种从十六进制4字节表示形式还原15的快速而肮脏的方法。但是,即使开始谈论它也有太多错误,正确的做法是问自己“为什么我需要这个,而我该如何做得更好”。

float hexStrToFloat(const char* str)
{
    int tmp = 0;
    sscanf_s(str, "%x", &tmp);
    return(*(float*)&tmp);
}

脚注:假定为32位或更高的little-endian机器。

© www.soinside.com 2019 - 2024. All rights reserved.