单片机中浮点数取值问题

2019-04-15 17:18发布

由于在部分开发编译器中,无法使用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(" 符号:=%d 整数部分 =%d,小数部分=%d ",ret.sig,ret.inter_part,ret.decimal);
return 0; }