51单片机中long型数据转字符串

最近遇到一个问题,搞了一天才算解决。记录如下。

原来想的代码:

unsigned long tmp; 
unsigned char buf[4] = {0x52,0xed,0x05,0x89};
unsigned char strbuf[32];
unsigned char i,len;
tmp = (buf[0]<<24)+(buf[1]<<16)+(buf[2]<<8)+buf[3];
sprintf(strbuf,"CID:%u;\r\n",tmp);
len = strlen(strbuf);
for(i=0;i<len;i++)
    Send_Data_To_UART0(strbuf[i]);

输出结果:CID:0;

可以看到结果和想要的明显不一样。开始想的应该是sprintf的问题。51单片机(N76E003)的资源太少,用这个库函数太占用资源。就重写了一个4字节数据转成10位字符串的函数:

char int2char(unsigned int dat,unsigned char *pbuf)
{
	char i=9;
	unsigned char j=0;
	char len;
	do
	{
		pbuf[i] = dat % 10 + '0';
		dat /=10;
		i--;
	}while(dat!=0&&i>=0);
	
	if(i>=0)
	{
		len = 9-i;
		for(j=0;i<9;i++)
		{
			pbuf[j++] = pbuf[i+1];
			pbuf[i+1] = 0;
		}
	}
	else
	{
		len =10;
	}
	return len;
}

结果还是有问题。 最后想到的方法:

    unsigned long *tmp;
	unsigned char buf[4] = {0x52,0xed,0x05,0x89};
	unsigned char strbuf[32];
	unsigned char i,len;
	tmp = &buf[0];
	len = int2char(*tmp,strbuf);
	Send_Data_To_UART0('C');
	Send_Data_To_UART0('I');
	Send_Data_To_UART0('D');
	Send_Data_To_UART0(':');
	for(i=0;i<len;i++)
		Send_Data_To_UART0(strbuf[i]);
	Send_Data_To_UART0(';');
	Send_Data_To_UART0('\r');
	Send_Data_To_UART0('\n');

输出结果:CID:1391265161;得到想要的结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值