yxylxj 发表于 2015-7-30 10:48:12

Keil C51 使用 sprintf 的疑惑

本帖最后由 yxylxj 于 2015-7-30 10:52 编辑

char buff={0};
sprintf(buff,"%d\r\n",10);
串口打印出 buff不对


改为:
char buff={0};
int a =10;
sprintf(buff,"%d\r\n",a);结果正确


另外 哪里有 介绍 C51 Keil 中关于
char----------%c
unsigned char   
int--------%d
unsignedint
unsigned   long对应的通配符

yxylxj 发表于 2015-7-30 11:17:54

自问自答吧

steaven2000 发表于 2015-7-30 11:28:34

把下面代码替换一下:
sprintf(buff,"%d\r\n",10);   --> sprintf(buff,"%d\r\n",(int)10);

justdomyself 发表于 2015-7-30 12:55:03

我在stm32下用sprintf无法打印浮点型数据

hpdell 发表于 2015-9-28 12:04:08

justdomyself 发表于 2015-7-30 12:55
我在stm32下用sprintf无法打印浮点型数据


在stm32使用 sprint

float k = 0.0003f;


sprintf("\r\nFLOAT = %0.4f", (float)k);   // 输出小数点后4位数据

asbzhang 发表于 2015-9-28 12:25:23

c51下,答应char类型的,记得好像是用"%bd"

1a2b3c 发表于 2015-9-28 13:00:46

默认是int,所以字节时候要么打印格式选择b开始的,要么将变量强制转换成16位的,像3楼或者六楼那样

justdomyself 发表于 2015-9-28 22:10:56

hpdell 发表于 2015-9-28 12:04
在stm32使用 sprint

float k = 0.0003f;


我的是时灵时不灵

本来一开始好好的,修改下代码后就貌似又不行了   改的地方完全一点关系都没有


有的时候再改下优化等级就行了


不行的时候现象是,任何浮点数据,转成字符串就变成了0.0,


(float),需要加这个强制转化么?

hpdell 发表于 2015-9-29 12:01:31

justdomyself 发表于 2015-9-28 22:10
我的是时灵时不灵

本来一开始好好的,修改下代码后就貌似又不行了   改的地方完全一点关系都没有


貌似一般情况下,加上比较好一点吧

justdomyself 发表于 2015-9-30 16:58:32

hpdell 发表于 2015-9-29 12:01
貌似一般情况下,加上比较好一点吧

不知道我说的情况你在stm32上有没有遇到过

hpdell 发表于 2015-10-1 09:15:46

justdomyself 发表于 2015-9-30 16:58
不知道我说的情况你在stm32上有没有遇到过

目前为止木有遇到过你说的情况哦
页: [1]
查看完整版本: Keil C51 使用 sprintf 的疑惑