最近遇到一个问题,搞了一天才算解决。记录如下。
原来想的代码:
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;得到想要的结果。