我有一个存储在无符号__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;
答案 0 :(得分:3)
这里的问题很可能是你通过让两个不同类型(非char)指针指向同一个内存位置而违反严格别名规则。
对您的问题最简单,最直接的解决方案就是memcpy
字节(在断言整数和浮点类型的大小相同之后):
float decimal = 0.0f;
memcpy(&decimal, &integer, sizeof(integer));