单片机中浮点数取值问题

来源:互联网 发布:上海昕致软件 编辑:程序博客网 时间:2024/06/08 12:06

由于在部分开发编译器中,无法使用float型数据,在单片机中取float型数据的整数部分和小数部分有点麻烦,

在网上看了别的兄弟代码,自己改下了下,测试还可以用。

typedef struct __buf_to_float_

{
int inter_part;
int decimal;
int sig;
}float_data;

char bufx[4] = {0x43,0x6a,0x00,0x00};
float_data buf_to_Float_get(char *bufx)
{
    int FloatValue = 0;
float_data ret;
int Exp;
int FloatPath;
int MantissaPart;
ret.sig = 1;
FloatValue |= bufx[0]<<24;
FloatValue |= bufx[1]<<16;
FloatValue |= bufx[2]<<8;
FloatValue |= bufx[3];

    if(FloatValue&0x80000000)  //最高位为符号位
    {
ret.sig = -1;
}
    Exp = (FloatValue>>23)&0xff; //取得指数字段,一个字节。第二到第9字节
    MantissaPart=(FloatValue&0x7fffff)|0x800000;//尾数字段,23位加一个默认位,共24位。
ret.inter_part = (MantissaPart>>(150-Exp));


FloatPath = MantissaPart&(0xffffff>>(Exp-126));//取得小数部分
ret.decimal = FloatPath/float(1<<(150-Exp));
return ret;

}

int main(void)

{

float_data ret;

ret = buf_to_Float_get(bufx);

printf("\n符号:=%d 整数部分 =%d,小数部分=%d\n",ret.sig,ret.inter_part,ret.decimal);

return 0;

}


原创粉丝点击