cairang的个人空间 https://blog.eetop.cn/cairang [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

union实现float和char的相互转换

已有 1154 次阅读| 2009-7-17 09:43 |个人分类:我的设计心得

        今天利用了union实现float和char的相互转换,也就是说实现了一个float型数据转换成它对应的4个字节的uchar型,同时把4个字节的uchar型可以转换成由它们组成的float型。主要代码如下:

定义一个成员是uchar和float型的uniom:

union

 float sub_float_ram;
 struct  {    
        uchar b1,b0,b3,b2;     //LSB
      } sep_float_ram ;
} u_float_ram;

下面两个子函数可以是实现相互转换:

1、float转uchar

void Write_Xram_Float(uint addr,float write_data)
{
 u_float.sub_float = write_data;
 DatRead[addr+0] = u_float.sep_float.b3;
 DatRead[addr+1] = u_float.sep_float.b4;
 DatRead[addr+2] = u_float.sep_float.b1;
 DatRead[addr+3] = u_float.sep_float.b2;
}

1、uchar转float


float Read_RAM_Float(uint addr)
{
   u_float_ram.sep_float_ram.b3 = DatRead(addr+0);
   u_float_ram.sep_float_ram.b2 = DatRead(addr+1);
   u_float_ram.sep_float_ram.b1 = DatRead(addr+2);
   u_float_ram.sep_float_ram.b0 = DatRead(addr+3);
   return(u_float_ram.sub_float_ram);
}

       我是用串口调试助手监听上位机的Modbus通信数据信息,分析监听到的数据,因为监听到的都是十六进制,所以,一个float由四个字节组成,起初根本不知道它代表的意义,通过上面的转换,我知道了它代表一个参数的值,完成监听工作;


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 2

    评论
  • 125

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 09:02 , Processed in 0.022278 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部