16进制数转换成Float型数

单片机与传感器通信,标准的MODBUS RTU协议。
到了数据解析部分,如何把4个字节的数据读出来,显示到屏幕呢?

单片机收到一帧数据,放入数组中,进行数据的拼凑,4个字节拼凑成一个32位的int型数据。然后再进行解析。

//浮点型数在计算机中的存储方式:浮点型数在计算机中的存储)

/*部分函数实现*/
//假如下边数组中收到的是传感器随机返回的一帧数据
//协议解释:第一个字为地址 第二个字节为功能码 第三个字节为连续几个字节的数据
//后边紧跟的是第三个字节长度的数据,最后两位位CRC校验
 unsigned char uartRx_Buf[] = {0x01, 0x04 ,0x04 ,0x42 ,0x98 ,0x79, 			0xC4, 0x4C, 0x10};
 void Data_Toge(void)
 {
 	signed short temp1,temp2;
 	signed int value;
 	temp1 =  ((uartRx_Buf[3]<<8 ) | (uartRx_Buf[4]<<0));
 	temp2 =  ((uartRx_Buf[5]<<8 ) | (uartRx_Buf[6]<<0));
	value = ((temp1 <<16) | ( temp2<<0));
 }
 //16进制数转换成Float型数据,正负都

 float HexToFloat(unsigned int number)
{
    //第一步:取出符号位没有问题
    signed sign = ((number & 0x80000000)? -1 : 1);  //符号位
    
    //第二步:计算指数
    signed int exponent = ((number >> 23) & 0xff) - 127;  //指数
    //第三步:计算尾数
    float mantissa = 1 + ((float)(number & 0x7fffff) / 0x7fffff);  //尾数
    return sign * mantissa *( pow(2, exponent));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值