admin管理员组文章数量:1794759
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)); }版权声明:本文标题:16进制数转换成Float型数 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686573981a83433.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论