原创 union实现float和char的相互转换

2009-7-18 14:19 7272 6 6 分类: MCU/ 嵌入式
 今天利用了union实现float和char的相互转换,也就是说实现了一个float型数据转换成它对应的4个字节的uchar型,同时把4个字节的uchar型可以转换成由它们组成的float型。主要代码如下:

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


union

 float sub_float;
 struct  {    
        uchar b1,b0,b3,b2;     //LSB
      } sep_float ;
} u_float;


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


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.sep_float_ram.b3 = DatRead(addr+0);
   u_float.sep_float_ram.b2 = DatRead(addr+1);
   u_float.sep_float_ram.b1 = DatRead(addr+2);
   u_float.sep_float_ram.b0 = DatRead(addr+3);
   return(u_float.sub_float);
}


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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条