打印
[其他ST产品]

利用联合体进行浮点型数据与整形数据的互相转换

[复制链接]
862|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxs0026|  楼主 | 2023-6-29 01:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实际工程中,经常需要将数据存入到flash中或者通过串口发送。但这些数据往往有一部分是浮点型而非整型,需要进行转换,我们可以借用C语言中的联合体特性进行转换,代码如下:
    union Transfer
    {
        /*定义union,方便进行
         整型和浮点型的转换*/
        float   Float_data;//stm32中float占4个字节32位
        uint8_t Byte[4];   //4个uint8_t类型元素,占32位
    }transunion,*transptr=&transunion;

    /*******************************************************************************
    * Function Name  : Float_To_Int
    * Description    : 浮点数转化为整形
    * Parameters     : 浮点数
    * Return         : 32位整型
    * Notice         : None
    *******************************************************************************/
    uint32_t Float_To_Int(float data)
    {
            uint32_t Flash_uInt=0;
        /*将float的数据分别按字节存放在地址内*/
            transptr->Byte[0]=((uint8_t *)&data)[0];
            transptr->Byte[1]=((uint8_t *)&data)[1];
            transptr->Byte[2]=((uint8_t *)&data)[2];
            transptr->Byte[3]=((uint8_t *)&data)[3];
            Flash_uInt=*(uint32_t*)transptr->Byte;//用uint32_t类型读取该32位地址的数据
            return Flash_uInt;
    }
   
    /*******************************************************************************
    * Function Name  : Int_To_Float
    * Description    : 整形转化为浮点数
    * Parameters     : 32位整形
    * Return         : 浮点数
    * Notice         : None
    *******************************************************************************/
    float Int_To_Float(uint32_t data)
    {
            double Flash_flt=0.0;
            //分解32位整形为4个8位整形
            transptr->Byte[0]=data&0xff;
            transptr->Byte[1]=(data>>8)&0xff;
            transptr->Byte[2]=(data>>16)&0xff;
            transptr->Byte[3]=(data>>24)&0xff;
            Flash_flt=transptr->Float_data;//利用float类型读取出该32位地址的数据
            return Flash_flt;
    }


使用特权

评论回复
沙发
Jacquetry| | 2023-7-6 23:51 | 只看该作者
这个挺不错啊,就是理解起来稍微麻烦点

使用特权

评论回复
板凳
Henryko| | 2023-7-7 23:50 | 只看该作者
这样不用进行转换运算吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

1152

帖子

1

粉丝