CString BCD码转asc(char *BCD,int bytes)
{
unsigned char  h=0,l=0,hh=240,ll=15;
 char *DPT_ASC=(char*)malloc(bytes);
for (int i = 0,j=0;i <7; i++) 
{
h=BCD[i];
l=BCD[i];
h=h & hh; // 高位
l=l & ll; // 低位
h=h>>4;
if(h<=9)h=h+48;
else h=h+55;
if(l<=9)l=l+48;
else l=l+55;
DPT_ASC[j]=h;
DPT_ASC[j+1]=l;
j=j+2;
}
CString DPT;

DPT.Format("%s",DPT_ASC);
return DPT;
}
CString Asc码ToBcd(char *BCD,int bytes)
{
unsigned char  h=0,l=0,hh=240,ll=15;
 char *DPT_ASC=(char*)malloc(bytes);
for (int i = 0,j=0;i <7; i++) 
{
 h=BCD[j];
 l=BCD[j+1];
  h=h | hh;
  l=l | ll;
      h=h<<4;
  if (h>=9) h=h-48;
 else h=h-55;
 if(l>=9) l=l-45;
      else l=l-55;
  DPT_ASC[i]=h+l;

       j+j+2;
}
CString DPT;

DPT.Format("%s",DPT_ASC);
return DPT;
}
AscToBcd 函数 我这样写怎么不对呢?正确的应该怎么写啊。我按照上面的那个函数反着写的啊...

解决方案 »

  1.   

    //b="abcdefg";转换成了b="61626364656667";怎么在转换 成 abcdefg
      

  2.   

    感觉你的函数名起的有歧义。abcd转到6162直接_stprintf就行了。6162转成ab则用
    '6' - '0' * 0x10 + '1' - '0' = 'a'
      

  3.   

    CString aa;
    unsigned char  h=0,l=0,ll=15;
       char  *tstr, *thex; 
    tstr=(char *)malloc(2);
       thex=(char *)malloc(2);
       thex="41";
     for (int i=0,j=0;i<1;i++)
       { 
    h=thex[j];
    l=thex[j+1];
    if(h<=9) h=h & ll;
          else if (h<='F') h=h-55; 
          else h=h-87; 
          h<<=4; 
          if (l<=9) l=l&ll;
          else if (l<='F') l=l-55; 
          else l=l-87; 
    tstr[j]=h;
    tstr[j+1]=l;
      j=j+2;   }   aa.Format ("%s",tstr);
    AfxMessageBox(aa);                麻烦帮忙改改吧,或者告诉我中间转换的方法 而且发现碰到0就退出了。