//将ASC串转为BCD码
//NUMS==SOUR的ASC数
//例:if sour="9999",nums=4 then dest=0x99,0x99
int asc_to_bcd(unsigned char *sour,int nums,unsigned char *dest)
{
int i,len;
unsigned char result;
unsigned char tmpbuf[10000];
if(nums>9999)
return 1;
len=nums/2+nums%2;
if(nums%2!=0)
{
tmpbuf[nums]=0x30;
memcpy(tmpbuf,sour,nums);
}
else
memcpy(tmpbuf,sour,nums);
for(i=0;i<len;i++)
{
result=*(tmpbuf+2*i);
if((result>=0x30) && (result<=0x39))
*(dest+i)=(result-0x30)*0x10;
else if((result>=0x41) && (result<=0x46))
*(dest+i)=(result-55)*0x10;
else if((result>=0x61) && (result<=0x66))
*(dest+i)=(result-87)*0x10;
else
result=0x30;
result=*(tmpbuf+2*i+1);
if((result>=0x30) && (result<=0x39))
*(dest+i)+=(result-0x30);
else if((result>=0x41) && (result<=0x46))
*(dest+i)+=(result-55);
else if((result>=0x61) && (result<=0x66))
*(dest+i)+=(result-87);
else
*(dest+i)+=0x30;
}
return 0;
}
//NUMS==SOUR的ASC数
//例:if sour="9999",nums=4 then dest=0x99,0x99
int asc_to_bcd(unsigned char *sour,int nums,unsigned char *dest)
{
int i,len;
unsigned char result;
unsigned char tmpbuf[10000];
if(nums>9999)
return 1;
len=nums/2+nums%2;
if(nums%2!=0)
{
tmpbuf[nums]=0x30;
memcpy(tmpbuf,sour,nums);
}
else
memcpy(tmpbuf,sour,nums);
for(i=0;i<len;i++)
{
result=*(tmpbuf+2*i);
if((result>=0x30) && (result<=0x39))
*(dest+i)=(result-0x30)*0x10;
else if((result>=0x41) && (result<=0x46))
*(dest+i)=(result-55)*0x10;
else if((result>=0x61) && (result<=0x66))
*(dest+i)=(result-87)*0x10;
else
result=0x30;
result=*(tmpbuf+2*i+1);
if((result>=0x30) && (result<=0x39))
*(dest+i)+=(result-0x30);
else if((result>=0x41) && (result<=0x46))
*(dest+i)+=(result-55);
else if((result>=0x61) && (result<=0x66))
*(dest+i)+=(result-87);
else
*(dest+i)+=0x30;
}
return 0;
}