在C ++中将unsigned int重新解释为float

时间:2013-03-20 17:56:59

标签: c++ casting int

我有一个存储在无符号__int32中的浮点表示。我知道你可以重建数字字节移位,就像这个问题的答案中所指示的那样:

Convert int to float in C (no casting)

我想避免移位,乘法和求和,只需重新解释这些位。我尝试了维基百科的IEEE 754单精度输入示例,但重新解释导致了0.

这是我的代码:

unsigned __int32 integer = 0;   
unsigned __int32 mask = 0;
mask = mask + 1 << 30;
mask = mask + 1 << 29;
mask = mask + 1 << 28;
mask = mask + 1 << 27;
mask = mask + 1 << 26;
mask = mask + 1 << 22;
integer = integer ^ mask;
printf("%ld %d\n", integer, sizeof(__int32));
float* decimal = reinterpret_cast<float*>(&integer);
printf("%f", *decimal);
return 0;

1 个答案:

答案 0 :(得分:3)

这里的问题很可能是你通过让两个不同类型(非char)指针指向同一个内存位置而违反严格别名规则。

对您的问题最简单,最直接的解决方案就是memcpy字节(在断言整数和浮点类型的大小相同之后):

float decimal = 0.0f;
memcpy(&decimal, &integer, sizeof(integer));