uint32 转 float 示例

/** 将符合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;
}

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

utopia54

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值