在C++中将uint转换为float

Dor*_*oro 3 c++ floating-point

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

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

uint:1127042708

float:173.3069458 ..

任何帮助,将不胜感激.

Lio*_*gan 5

UINT d= 0x432D4E94;
float f= *(float*)&d; // 173.30695
Run Code Online (Sandbox Code Playgroud)


650*_*502 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;
}
Run Code Online (Sandbox Code Playgroud)

但请注意,即使您知道浮点数是标准IEEE754格式,也可能存在字节序问题.


小智 5

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

float f;
ReadProcessMemory(hProcess, lpBaseAdress, &f, sizeof(f), NULL); 
Run Code Online (Sandbox Code Playgroud)

请注意,这会在什么时候破坏sizeof(unsigned int) != sizeof(float).

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