我正在尝试从here获得的十六进制表示创建float
。对于32.50002
的表示,该站点将IEEE 754十六进制表示显示为0x42020005
。
在我的代码中,我有:float f = 0x42020005;
。但是,当我打印该值时,我会1.10E+9
而不是32.50002
。为什么是这样?
我正在使用Microsoft Visual C ++ 2010。
答案 0 :(得分:5)
通过float
为=
变量指定值时,不指定其内部表示,而是指定其值。十进制的0x42020005是1107427333,这是您要分配的值。
无法以独立于平台的方式检索float
的基础表示。但是,做出一些假设(即,float
实际上是使用IEEE 754格式),我们可以耍一下:
float f;
uint32_t rep = 0x42020005;
std::memcpy(&f, &rep, sizeof f);
会给出理想的结果。
答案 1 :(得分:1)
0x42020005
是int
,其值为1107427333。
float f = 0x42020005;
等于
float f = 1107427333;
答案 2 :(得分:1)
0x42020005
实际上是int
值1107427333.
您可以试用此代码。应该工作......使用union:
union IntFloat {
uint32_t i;
float f;
};
并在需要转换值时调用它。
union IntFloat val;
val.i = 0x42020005;
printf("%f\n", val.f);