由于在部分开发编译器中,无法使用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;
}