int ASC2BCD(const char* szASC,byte* szBDC)
{
int szASCLen=strlen(szASC);
byte * bpBCD = new byte[szASCLen/2];
int nss=0,nOu=0;
for (int x=szASCLen-1;x>=0;x--)
{
//取出字符串中的一个数值
char char_1=*(szASC+x);
//取出BCD码
int nBDC;
if (char_1 != '.') nBDC=(char_1 & 0xF);
else nBDC=14;
if ((++nOu)&0x01)
bpBCD[nss]=(nBDC << 4);
else
bpBCD[nss++] += nBDC;
}
int nBit=0;
if (nOu%2==0) nBit=nOu/2-1;
else nBit=nOu/2;
for (int y=0;y<=nOu/2;y++)
{
szBDC[y]=(bpBCD[nBit-y] << 4);
szBDC[y]+=(bpBCD[nBit-y] >> 4);
}
return nBit;
// memcpy(szBDC,bpBCD,sizeof(bpBCD)*2);
}
void CDotTestDlg::OnButton1()
{
char szTest[]={"123456789123456789.789"} ;
int s=strlen(szTest);
byte * szAn=new byte[s/2];
int w=ASC2BCD(szTest,szAn);
for(int x=0;x<=w;)
TRACE("%x ",szAn[x++]);
}
事例:
输出:12 34 56 78 91 23 45 67 89 e7 89