有没有办法可以用十六进制数初始化浮点型变量?我想要做的是说我有4
的单精度表示,其中十六进制为0x40800000
。我想做float a = 0x40800000
这样的事情,在这种情况下,它将十六进制值作为整数。我该怎么做才能把它当作浮点数?
答案 0 :(得分:2)
一种选择是通过type punning使用a union。这是defined behaviour in C since C99(以前这是实现定义的)。
union {
float f;
uint32_t u;
} un;
un.u = 0x40800000;
float a = un.f;
在标记此C ++时,您还可以使用reinterpret_cast
。
uint32_t u = 0x40800000;
float a = *reinterpret_cast<float*>(&u);
在执行其中任何一项操作之前,您还应确认它们的大小相同:
assert(sizeof(float) == sizeof(uint32_t));
答案 1 :(得分:1)
如果引入临时整数类型变量,将其强制转换为浮点类型并取消引用它,则可以执行此操作。您必须小心所涉及类型的大小,并知道它们可能会发生变化。例如,使用我的编译器,这可以工作:
unsigned i = 0x40800000;
float a = *(float*)&i;
printf("%f\n", a);
// output 4.00000
答案 2 :(得分:1)
我不确定你是如何得到你的价值&#34; 0x40800000&#34;。
如果以int
的身份进入,您可以这样做:
const auto foo = 0x40800000;
auto a = *(float*)&foo;
如果它以字符串形式出现,你可以这样做:
float a;
sscanf("0x40800000", "0x%x", &a);