注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

碧空雄鹰的博客

人和人相遇,靠的是一种缘;人和人相处,靠的是一份诚;人和人相爱,靠的是一份真

 
 
 

日志

 
 
关于我

人生有三样东西是无法隐瞒的:咳嗽、贫穷和爱,你想隐瞒,却欲盖弥彰。 人生有三样东西是不该挥霍的:身体、金钱和爱,你想挥霍,却得不偿失。 人生有三样东西是无法挽留的:生命、时间和爱,你想挽留,却渐行渐远。 人生五靠: 命运不是靠时间,而是靠勤奋,时间不是靠虚度,而是靠使用,感情不是靠缘分,而是靠珍惜,金钱不是靠使用,而是靠投资,事业不是靠满足,而是靠踏实。 人生三大遗憾 : 不会选择,不坚持选择,不断地选择。

在C51中如何将数字转换成字符串的问题  

2013-03-20 07:59:38|  分类: S51 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

将整数转换成字符串,在C51中你如何做?
这个问题似乎很简单,keilC中也用sprintf()函数嘛,用就行了。但对于“寸土寸金”的单片机来说,问

题可没那么简单。

看看我代码中这句弃之不用的代码吧:

//sprintf(sFileLen,"%d",fileLen*128);print(sFileLen); //使用这个库函数,体积一下增加2563. 我

的程序空间马上溢出不够用了。 OMG! C51库函数,伤不起啊

能自己写就自己写,尽量不用库函数吧。谱太大,用不起啊。下面这个函数就是类似sprintf()的作用。

为了节省几个字节,结果就直接发出来了,不必存储到uchar[]中了。

// 向串口发送一个整数,支持0-65535,如 uint=8189,发送的是'8'  '1'  '8'  '9'
void serial_put_uint(unsigned int number)
{
      unsigned int i;
      unsigned int nTmp;

     //感觉这写法怪怪的吗?干嘛不for(i=1;i<5;i++) 因为这样不需要使用库函数pow()
     for(i=10000;i>=1;i=i/10)

      {
            nTmp = number/i;
            if(nTmp >=1 ) serial_put_char((unsigned char)(nTmp%10 + 0x30));
      }
}


http://blog.csdn.net/dreamfine/article/details/7627143

 

在C51中如何将数字转换成字符串的问题

昨天试验通过了关于 sprintf 函数的使用,发现,他太占空间了,几乎点了900多的空间,总空间才5K 有点得不偿失,于是,我自己写了一个小的函数将此问题解决了!

?void num2char(int num,unsigned char temp[3]) 一定要注意这里的字符串长度。
{
int i;
i = 2;    // 与这里的字符串长度相对应,从最后一个字符位开始。

do{
    temp[i] = num%10+'0';       //不太清楚,为什么这里加上 ‘0’ 就是字符了呢!

    num/=10;

i = i -1;
      
} while(i>=0);

}

 

已试验通过。如 num2char(45,s[3]), 得到的结果是 045.

 

http://hi.baidu.com/lujin49/item/e1c69c6611d0bf2769105b91

  评论这张
 
阅读(725)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018