该程序的功能:实现ASCII转换成BCD码函数,输入一个ASCII码 然后在文本框里把相应的BCD码显示出来。
问题1:out[i/2]   =   (c1<<4)|(c2&0xF); 这句话是什么意思?|这个符合起什么作用?
问题2:功能未能实现,只能显示个个乱码,烫烫烫烫123BYTE* Ascii2Bin(BYTE    *out,   BYTE   *in,  int  len)   
{   
      int   i;   
      char   c1,c2;   
      for(i=0;i<len;i+=2)   
      {   
         c1=in[i]-'0'; // 减去0,由字符型转成数字一个数字字符-‘0’的差值就是‘0-9’的数字 
          if   (c1>9)   c1-=7; // 由于字母"A"在Ascii中排在数字"9"后面相隔7个位置,所以如果前面减“0”后的数大于9,说明不是0-9的ascii码,而是字母,那就应该再减7  
          c2=in[i+1]-'0';      
          if   (c2>9)   c2-=7; //    
          out[i/2]   =   (c1<<4)|(c2&0xF);   ?
      }   
  return out;
}   void CTest2Dlg::OnOK() 
{
// TODO: Add extra validation here

    UpdateData(1);//从界面到变量
    BYTE *Breturn;
BYTE  temp[8],str1[8],str2[8];
Breturn=Ascii2Bin(str1,str2,9);
    
m_strData.Format("%s%d",Breturn,123);
UpdateData(0);//从变量到界面
}

解决方案 »

  1.   

    “乱码,烫烫烫烫123 ”
    是你的算法错误,ASCII没有>127的,>127的是汉字。
    半个汉字与其它字符在一起,造成乱码
      

  2.   

    刚刚才看楼主的代码,乱!
    没有基础知识,也没大脑逻辑!void CTest2Dlg::OnOK() 

    // TODO: Add extra validation here UpdateData(1);//从界面到变量 
    BYTE *Breturn; 
    BYTE  temp[8],str1[8],str2[8]; // 你取的值在哪
    Breturn=Ascii2Bin(str1,str2,9); // str1,str2全是没有初始化的未知数!
        
    m_strData.Format("%s%d",Breturn,123); 
    UpdateData(0);//从变量到界面 

      

  3.   

    yhp1888 多谢。void CTest2Dlg::OnOK() 
    {
    // TODO: Add extra validation here

        UpdateData(1);    //从界面到变量
        BYTE Breturn[9];  
        memset(Breturn,0,9);
    BYTE temp[8]={66,67,68,69,70,71,72,73};
    Ascii2Bin(Breturn,temp,9);
    m_strData.Format("%x%x%x%x%x%x%x%x",Breturn[0],Breturn[1],Breturn[2],Breturn[3],Breturn[4],Breturn[5],Breturn[6],Breturn[7]); UpdateData(0);//从变量到界面
    }输出结果:bcdef012ce000