/** 将符合IEEE754协议的uint32 转 float 示例
* @brief 将32位无符号整数转为有符号的符点数
* @param value1:无符号短整形 address_1: 16903 = 0x4207
* @param value2:无符号短整形 address_2: 02097 = 0x0831
* https://www.h-schmidt.net/FloatConverter/IEEE754.html
* https://blog.csdn.net/crjmail/article/details/79723051
* @return 返回带符号的符点数 33.758 = 0x42070831 = 1107757105
*/
typedef union
{
float float_value;
uint8_t uint8[4];
}packet_uint32_to_float;
float uint32_to_float(uint16_t value1, uint16_t value2)
{
packet_uint32_to_float packet;
uint8_t buf[4]; memset(buf,0x00,sizeof(buf));
buf[0] = (uint8_t)((value1 >> 8) & 0xFF);
buf[1] = (uint8_t)((value1) & 0xFF);
buf[2] = (uint8_t)((value2 >> 8) & 0xFF);
buf[3] = (uint8_t)((value2) & 0xFF);
uint32_t uint32 = ((buf[0]<<24) & 0XFFFFFFFF) + ((buf[1]<<16) & 0XFFFFFF) + ((buf[2]<<8) & 0XFFFF) + buf[3];
for(uint8_t i = 0; i < 4; i++)
{
packet.uint8[i] = (uint8_t)(uint32>>(i*8));
}
print("modbus_uint32_to_float uint32=%d, value1=%d; value2=%d; float_value = %f;",uint32,value1,value2,packet.float_value);
return packet.float_value;
}