July 21, 2009
float 转换 DWORD 的陷阱
本以为是个很简单的东西,但其中隐藏了一个很大的陷阱:不能使用强制转换。亲手试试下面的几行代码就知道为什么了:
#include <Windows.h>
int main(int argc, char* argv[])
{
float f = 2.0f;
byte content[4];
::ZeroMemory(content, sizeof(content));
memcpy(content, (byte*)&f, 4); // float 原始内容
DWORD dw = (DWORD)f; // C 风格强制转换,错误
memcpy(content, (byte*)&dw, 4);
DWORD dw2 = *(DWORD*)&f; // 转换的正确做法
memcpy(content, (byte*)&dw2, 4);
DWORD dw3 = static_cast<DWORD>(f); // C++ 风格强制转换,错误
memcpy(content, (byte*)&dw3, 4);
return 0;
}
今天一整天全栽在这个上面了。
沙发
换风格啦
@Showfom 很喜欢这种白底色的简洁主题,自己做的?