c51语言 字符串转数值,在C51中如何将数字转换成字符串的问题

在资源有限的C51单片机环境下,作者发现标准库函数sprintf()占用过多程序空间。为解决这一问题,作者编写了两个自定义函数,实现了将整数转换为字符串的功能,以减少程序体积。这两个函数分别为serial_put_uint()和num2char(),它们分别用于串口发送整数和存储整数为字符串。这两个函数通过循环和取余运算完成转换,避免了使用库函数,从而有效地节省了存储空间。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值