IEEE754标准转换QT代码
qtcreator使用的ieee754标准的4字节数组与浮点数之间的转换方法,ieee754的4位数组如果转换成二进制后,大体结构是:
位序号 | 1 | 2-9 | 10-32 |
意义 | 符号位, 正数为0,负数为1. | 指数位, 指数是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();}
};