将整数转换成字符串,在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));
}
}
在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.