串口发送float类型数据?

[复制链接]
9529|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);
lws 发表于 2010-12-15 18:22 | 显示全部楼层
大端、小端问题,呵呵,以前遇到过。
coody 发表于 2010-12-15 19:44 | 显示全部楼层
大小端问题,你反过来发送看看,先低后高或先高后低都试试
免证入网 发表于 2010-12-16 09:08 | 显示全部楼层
接收也要是浮点类型,你把转换为四个char型分别接受四个字节,顺序问题注意了保证正常。
 楼主| shell.albert 发表于 2010-12-17 11:31 | 显示全部楼层
就是大小端问题,谢谢解决了。
xinruzhishui 发表于 2014-8-19 09:42 | 显示全部楼层
shell.albert 发表于 2010-12-17 11:31
就是大小端问题,谢谢解决了。

你好  我现在在做串口收发浮点数,C语言刚学没多久,希望可以得到你的帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

32

主题

1934

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部