我正在使用ReadProcessMemory来获取4个字节。该函数允许我将其表示为unsigned int。我希望将其表示为浮动;或换句话说,使用此uint的字节表示形式为我的浮点数。我已经尝试过铸造它似乎不起作用。
实施例: 字节表示: 94 4E 2D 43
UINT: 1127042708
浮动: 173.3069458 ..
任何帮助都将不胜感激。
答案 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)