单片机向pc机传输数据,有办法将浮点数转换成字符串再传输吗?或者二进制转换成浮点数的程序如何编写?

有经验的来,谢谢... 有经验的来,谢谢 展开
 我来答
神马·似鸟非鱼
2011-04-07 · 超过11用户采纳过TA的回答
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
//程序在VC6下实验过
#include <stdio.h>

int main(void)
{
float f = 2.5422, value = 0; //f可改为其他的数试试
float *pf = &f;
char i, array[4];

//for循环将float在内存的四个字节按顺序分别存到一个字符数组(放一个float数用的数组大少一般用4)中
for(i = 4; i > 0; i--)
{
//强制类型转换,语句换成array[i - 1] = ((char *)pf)[i - 1];
array[i - 1] = *( (char *)pf + (i - 1));
}

value = *((float *)array); //将在内存相邻的四字节强制转换成float的地址再取值

printf("%f %f\n", value, f); //输出的值与初始化的值可能有一定的小误差
return 0;
}
如对上述程序有疑问可求解
追问
哎~~我要的好像是将32位二进制转换成浮点数呢~~
追答
value = *((float *)array);   //将在内存相邻的四字节强制转换成float的地址再取值
该语句就是将相邻的四个字节(32位)强制类型转换成float数

在于振南的51单片机视频略有讲解怎么可将浮点数发送出去(原理与上面的方法相同,在存储地址上做文章)

提醒一句:上面和下面的方法的正确性需保证发送的设备和接收的设备是同一种存储模式(大/小端子模式)
如需了解原理可自己查找讲解内存存储方式的相关书籍,

如需将float转换成字符发送还可以用联合union(还节约了内存,跟别人分享可别说是我告诉你的)
(如不太了解联合请查找讲解关于union的书籍,可看看C语言深度解剖一书的union关键字小节,该节还讲解了大小端子模式的存储方式)
下面介绍用联合的方法
例:
利用联合将20个float数发送到其他的接收设备
#define SIZE 20

union name
{
float f_array[SIZE];
char ch_array[SIZE * 4];
};
将需发送的float存到name联合的f_array数组中,再发送在内存中与要发的float数相对应的联合中的四个字节的ch_array数组元素发送到接收设备
之后再接收设备也定义相应(或相同)的联合的字符数组接收发来的字符数据,需要用时可直接引用相应的float数组的元素即可
手机用户16869
2011-04-08 · TA获得超过555个赞
知道答主
回答量:529
采纳率:0%
帮助的人:0
展开全部
后位数加起来,比如是25.5是最大值那就是用8位的ADC.然后你编程的时候用浮点变量,并把采样值/10就可以.
可是做个朋友on-raptor@tom.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式