求助c51 lcd12864 用sprintf函数显示数字
时间:10-02
整理:3721RD
点击:
为什么 在51单片机我用sprintf函数格式化数字输出到字符串中,然后用12864显示 最大数字只能显示到32767,超过这个数就显示不正常了
unsigned int a=39676;
char s[6];
sprintf(s,"%05d",a);
show_string(0x94,s);
有人说是int 和 unsigned的问题
我用vc++,测试没问题,正常显示
#include "stdio.h"
int main()
{
int a=65389;
char s[6];
sprintf(s,"%d",a);
printf("%s\n",s);
return 0;
}
之后我把显示数字函数改成了 ,可以正常显示
void show_number2(uchar add,unsigned int n)
{
char s[6];
char i;
i=0;
s[i++]=n/10000+48;
s[i++]=n%10000/1000+48;
s[i++]=n%1000/100+48;
s[i++]=n%100/10+48;
s[i++]=n%10+48;
s[i++]=0;
show_string(add,s);
}
帮我分析下sprintf为什么不能显示大于32767的数字
unsigned int a=39676;
char s[6];
sprintf(s,"%05d",a);
show_string(0x94,s);
有人说是int 和 unsigned的问题
我用vc++,测试没问题,正常显示
#include "stdio.h"
int main()
{
int a=65389;
char s[6];
sprintf(s,"%d",a);
printf("%s\n",s);
return 0;
}
之后我把显示数字函数改成了 ,可以正常显示
void show_number2(uchar add,unsigned int n)
{
char s[6];
char i;
i=0;
s[i++]=n/10000+48;
s[i++]=n%10000/1000+48;
s[i++]=n%1000/100+48;
s[i++]=n%100/10+48;
s[i++]=n%10+48;
s[i++]=0;
show_string(add,s);
}
帮我分析下sprintf为什么不能显示大于32767的数字
因为你给sprintf函数传递的参数是int型啊。int型的有效范围是-32768~+32767。
注意 sprintf(s,"%05d",n); //用的是d,代表int
自己想想把一个unsigned int型当做signed int型传递是个什么结果。
来自百度搜索的
一语道破天机啊,%d:输入输出为整形 %ld 长整型 %hd短整型 %hu无符号整形 ,太感谢你了
和楼上意见一致 这是正常的小错误
挺好的!我已下载,里面程序可以直接运行!
Thanks
6666666666666666666666666666666
谢谢