在C ++中将uint转换为float

时间:2011-02-20 13:54:05

标签: c++ floating-point

我正在使用ReadProcessMemory来获取4个字节。该函数允许我将其表示为unsigned int。我希望将其表示为浮动;或换句话说,使用此uint的字节表示形式为我的浮点数。我已经尝试过铸造它似乎不起作用。

实施例: 字节表示: 94 4E 2D 43

UINT: 1127042708

浮动: 173.3069458 ..

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:5)

UINT d= 0x432D4E94;
float f= *(float*)&d; // 173.30695

答案 1 :(得分:5)

最安全的方法(考虑到可能的对齐问题)是使用联合

#include <stdio.h>

int main(int argc, const char *argv[])
{
    union FloatOrUInt
    {
        float asFloat;
        unsigned int asUInt;
    } fu;

    fu.asUInt = 1127042708;
    printf("Float value = %0.6f\n", fu.asFloat);

    return 0;
}

但请注意,即使您知道浮点数采用标准IEEE754格式,endianness也可能存在问题。

答案 2 :(得分:5)

ReadProcessMemory()会将指针指向void,因此您可以将其指向float

float f;
ReadProcessMemory(hProcess, lpBaseAdress, &f, sizeof(f), NULL); 

请注意,这会在sizeof(unsigned int) != sizeof(float)

时中断

转换不起作用,因为它将取值而不是整数的表示。

答案 3 :(得分:2)

unsigned int input = 1127042708;

float output = *reinterpret_cast<float*>(&input)

float output = *(float*)(&input)