OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3696|回复: 2

关于sprintf函数转换浮点型数据

[复制链接]

4

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2016-1-21
在线时间
21 小时
发表于 2016-4-22 10:43:12 | 显示全部楼层 |阅读模式
10金钱
举个例子:
C51中拼装一个数组
sprintf(buf, "%.1f-%.1f-%.1f-%.1f", 22.2, 22.2, 22.2, 22.2);

我想这个数组拼装之后的结果应该为22.2-22.2-22.2-22.2

但是通过串口发出来一看,是:22.2-22.2-8.1-0.0
后面两个浮点型数据为什么不对?

最佳答案

查看完整内容[请看2#楼]

好吧,貌似知道答案了,sprintf函数进行转换是要占用内存的,buf是32个字节,我把它改为64之后,发现只有第一个浮点数转化正确。所以问题就是转化的时候内存溢出了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2016-1-21
在线时间
21 小时
 楼主| 发表于 2016-4-22 10:43:13 | 显示全部楼层
好吧,貌似知道答案了,sprintf函数进行转换是要占用内存的,buf是32个字节,我把它改为64之后,发现只有第一个浮点数转化正确。所以问题就是转化的时候内存溢出了
回复

使用道具 举报

4

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2016-1-21
在线时间
21 小时
 楼主| 发表于 2016-4-22 12:00:38 | 显示全部楼层
又写了一个函数,实现了转化多个浮点型数据(主要是因为单片机内存太小,在电脑上根本没必要)
void my_sprintf(unsigned char *buf, float T, float L, float H, int R)
{
    unsigned char i;
    unsigned char xdata T_buf[8] = {0};
                unsigned char xdata L_buf[8] = {0};
                unsigned char xdata H_buf[8] = {0};
                unsigned char xdata R_buf[8] = {0};
               
                sprintf(T_buf, "T%.1f-", T);
                sprintf(L_buf, "L%.1f-", L);
                sprintf(H_buf, "H%.1f-", H);       
                sprintf(R_buf, "R%d-", R);               
               
                sprintf(buf,"%s%s%s%s", T_buf, L_buf, H_buf, R_buf);
               
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表