现在的位置: 首页 > 综合 > 正文

二进制/十六进制转浮点数的编程(互转类似)

2013年03月06日 ⁄ 综合 ⁄ 共 426字 ⁄ 字号 评论关闭

转换的程序:

// 输入十进制整数,输出同样内存排布的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; 
} 

 应用:

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); 

原理就是复制内存数据再以不同的数据类型来解释。

抱歉!评论已关闭.