如何用usart传输float 和 double 类型 的数据啊

2019-07-20 19:04发布

在学习中遇到了使用usart需要传输float或者double类型的数据,


通常的u8,u16,u32类型的用usart只要注意高低字节的发送顺序即可,但是float,和double的存储结构比较复杂,


我自己是这样思考的


把float转化为u8 buf[4];
double 转化为u8 buf[8];


然后通过usart传输


再通过接收到的buf[4]重新组装为float
buf[8]重新组装为double


不知道这样能不能行,目前还没有实现代码,求大神指教

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
让睫毛载来爱
1楼-- · 2019-07-20 22:16
年都没过,找了一天找到解决方法了
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
让睫毛载来爱
2楼-- · 2019-07-21 02:36
 精彩回答 2  元偷偷看……
augustedward
3楼-- · 2019-07-21 04:08
当然可以,用指针就行了!
让睫毛载来爱
4楼-- · 2019-07-21 09:27
 精彩回答 2  元偷偷看……
augustedward
5楼-- · 2019-07-21 09:50
联合体也是是种好方法,指
BMN李
6楼-- · 2019-07-21 10:30
[mw_shl_code=c,true]#include <stdio.h>

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]

一周热门 更多>