打印

串口发送float类型数据?

[复制链接]
8600|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shell.albert|  楼主 | 2010-12-15 12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在使用UART发送float类型的数据,是拆分成四个字节发送的,如下:
typedef union{
           float fData;
           unsigned char cData[4];
}ADCData;


使用Keil单步调试的时候没有问题,数据发送也没有问题,但当我在上位机使用C语言合成输出的时候就不对了。

上位机C程序如下:
ADCData temp;
temp.cData[0]=0x40;
temp.cData[1]=0x13;
temp.cData[2]=0x5D;
temp.cData[3]=0x99;
printf("Voltage:%.4f\n",temp.fData);

结果根本不是浮点数,而是
-8.03318178508000000000e+307

请问这是怎么回事啊?

相关帖子

沙发
shell.albert|  楼主 | 2010-12-15 12:57 | 只看该作者
不会没人知道吧,现在的坛是怎么了,大家都不愿意回答这些技术问题?

使用特权

评论回复
板凳
HWM| | 2010-12-15 13:01 | 只看该作者
当然不对了,浮点数的具体形式各种机器是不同的。

使用特权

评论回复
地板
computer00| | 2010-12-15 13:10 | 只看该作者
顺序不一样了(即所谓的大端、小端问题),4个字节出现的位置刚好相反,收到后4个字节数顺序倒着存到里面去。
ADCData temp;
temp.cData[3]=0x40;
temp.cData[2]=0x13;
temp.cData[1]=0x5D;
temp.cData[0]=0x99;
printf("Voltage:%.4f\n",temp.fData);

使用特权

评论回复
5
lws| | 2010-12-15 18:22 | 只看该作者
大端、小端问题,呵呵,以前遇到过。

使用特权

评论回复
6
coody| | 2010-12-15 19:44 | 只看该作者
大小端问题,你反过来发送看看,先低后高或先高后低都试试

使用特权

评论回复
7
免证入网| | 2010-12-16 09:08 | 只看该作者
接收也要是浮点类型,你把转换为四个char型分别接受四个字节,顺序问题注意了保证正常。

使用特权

评论回复
8
shell.albert|  楼主 | 2010-12-17 11:31 | 只看该作者
就是大小端问题,谢谢解决了。

使用特权

评论回复
9
xinruzhishui| | 2014-8-19 09:42 | 只看该作者
shell.albert 发表于 2010-12-17 11:31
就是大小端问题,谢谢解决了。

你好  我现在在做串口收发浮点数,C语言刚学没多久,希望可以得到你的帮助。

使用特权

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

本版积分规则

个人签名:烟台电工@張紹言

32

主题

1934

帖子

8

粉丝