轉換的程序:
// 輸入十進制整數,輸出同樣內存排布的float表示
inline float i2f(int i)
{
float f = 0;
assert(sizeof(int) == sizeof(float));
memcpy(&f, &i, 4);
return f;
}
inline double ll2d(long long ll)
{
double d = 0;
assert(sizeof(double) == sizeof(long long));
memcpy(&d, &ll, 8);
return d;
} /* 何問起 hovertree.com */
應用:
int i = -1052770304; // 反匯編看到的值是這樣,實際是個float型,=-12.0
float f = i2f(i);
printf("f=%f\n", f);
long long ll = 0x4004000000000000L; // 內存裡顯示成這樣。 實際是double型2.5
double d = ll2d(ll);
printf("d=%f\n", d); /* 何問起 hovertree.com */
原理就是復制內存數據再以不同的數據類型來解釋。
推薦:http://www.cnblogs.com/roucheng/p/cpp11.html