在学习中遇到了使用usart需要传输float或者double类型的数据,
通常的u8,u16,u32类型的用usart只要注意高低字节的发送顺序即可,但是float,和double的存储结构比较复杂,
我自己是这样思考的
把float转化为u8 buf[4];
double 转化为u8 buf[8];
然后通过usart传输
再通过接收到的buf[4]重新组装为float
buf[8]重新组装为double
不知道这样能不能行,目前还没有实现代码,求大神指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
http://blog.chinaunix.net/uid-21222282-id-1829211.html
float a; //要发送的数据
unsigned char buf[4]; //缓存区
union result
{
float d;
unsigned char data[4];
}r1,t1;
r1.d=a;
for(i=0;i<4;i++)buf=r1.data[3-i];//部分软件识别需要对数据倒过来
usart_send(usart1,buf,4);
在接收方定义一个t1联合体
收到的数据放到t1.data数组中,读取t1.a就能还原出原来的float a
int main(void)
{
float fData = 1.323; //四字节
unsigned long int lnData = 0; //四字节
printf("%ld ", lnData = *((unsigned long int *)(&fData)));
printf("%f ", *((float *)(&lnData)));
while(1);
return 1;
}[/mw_shl_code]
一周热门 更多>