IEEE754标准转换QT代码
qtcreator使用的ieee754标准的4字节数组与浮点数之间的转换方法,ieee754的4位数组如果转换成二进制后,大体结构是:
第一位代表符号为,正数为0,负数为1.
第2到第9位为指数位,指数是2进制的指数,其中127代表指数0,可以表示指数范围±127.
后面10位到32位代表有效数字的小数部分xxxxxx,实际有效值就是1.xxxxxx,在作用相应指数。
详细资料网上搜索吧。下面直接上QT转换代码:
class IEEE754 //ieee754标准四字节数值与浮点数相互转换;
{
public:
static double toFloat(QString list) //数组转浮点数
{ list=list.replace(" ","");
if(list.length()!=8) { return 0;}
bool ok;
long sign= list.left(1).toLong(&ok,16)>>3;
long Zsh=(list.left(3).toLong(&ok,16) & 0x7F8)>>3;
long Wsh=list.right(6).toLong(&ok,16)+0x800000;
double ren=pow(-1,sign)*double(Wsh)*pow(2,(Zsh-150));
return ren;
// return QString::number(ren,'f',2 );
}
static QString toList(double value) //浮点数转数组
{ int sign;QString S;double v;
if((value)==0){return "00000000" ; }else if((value)>0){sign=0;v=value; } else {
sign=1;v=-value;}
long zhishu=0;
long weishu=0;
if(v<1){ while(v<1){v=v*2;zhishu--; } }
else { while(v>=2){v=v/2;zhishu++; }
zhishu = zhishu + 127;
v=v-1;
weishu=v*pow(2,23);
weishu=weishu+(zhishu%2)*0x800000;
zhishu=zhishu/2+sign*0x80;
S=QString::number(zhishu,16)+QString::number(weishu,16);
}
return S.toUpper();
}
};