有一个CEdit控件里,有个单选checkbox.
当不选择checkbox, CEdit显示的是CString字符串如aa
当选择checkbox,CEdit显示的是ASCII字符串61 61这两个函数如何整呢,我总是整出问题来.无法交货

解决方案 »

  1.   

    把CString中的每个字符取出来,然后%x,再加上空格合并不就可以吗
      

  2.   

    那是你程序写的有问题啊
    字符转换成十六进制:UpdateData();
    CString strEdit;
    CString str;
    for(int i=0; i<m_edit.GetLength(); i++)
    {
    str.Format("%2x",m_edit[i]);
    strEdit += str + " ";
    }
    m_edit = strEdit;
    UpdateData(FALSE);
      

  3.   

    那将CEdit显示的ASCII码如何转换成CString
      

  4.   

    你把Edit中的数据读出来,然后根据空格把他们分解成一个字符串数据,然后把数组每个字符串转换成一个16进制的数,再把这个数强制转换成字符,把这些字符连接起来就是你要的字符串了,代码自己写吧
      

  5.   

    ASCII转字符串:
    UpdateData();
    int rs=1;
    int i=0;
    CString str;
    CString strEdit;
    while(rs>0)
    {
    rs = m_edit.Find(" ",i);
    str = m_edit.Mid(i,rs-i);
    str.MakeUpper();
    int a=0;
    for(int j=0; j<str.GetLength(); j++)
    {
    a = 16*a;
    if(str[j]>'F')
    AfxMessageBox("输入的16进制数有误");
    else if(str[j]>='A')
    a += 10+(int)str[j]-65;
    else
    a += (int)str[j]-48;
    }
    strEdit += (char)a;
    i = rs+1;
    }
    m_edit = strEdit;
    UpdateData(FALSE);
      

  6.   

    //MFC6.0,
    //在复选框,即十六进制模式下,输入66 61ff后,再切换,来回切换几次就玩完了
    //点击复选框的相应函数代码
    void CNewsDlg::OnCheck1() 
    {
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    int nCheck = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();

    if(nCheck)
    {
    UpdateData();
    CString strEdit;
    CString str;
    CString m_edit;
    ((CEdit*)GetDlgItem(IDC_EDIT1))->GetWindowText(m_edit); for(int i=0; i<m_edit.GetLength(); i++)
    {
    str.Format("%2x",m_edit[i]);
    strEdit += str + " ";
    }
    m_edit = strEdit;
    ((CEdit*)GetDlgItem(IDC_EDIT1))->SetWindowText(m_edit);
    UpdateData(FALSE);
    }
    else
    {
    UpdateData();
    CString m_edit;
    ((CEdit*)GetDlgItem(IDC_EDIT1))->GetWindowText(m_edit); int rs=1;
    int i=0;
    CString str;
    CString strEdit;
    while(rs>0)
    {
    rs = m_edit.Find(" ",i);
    str = m_edit.Mid(i,rs-i);
    str.MakeUpper();
    int a=0;
    for(int j=0; j<str.GetLength(); j++)
    {
    a = 16*a;
    if(str[j]>'F')
    AfxMessageBox("输入的16进制数有误");
    else if(str[j]>='A')
    a += 10+(int)str[j]-65;
    else
    a += (int)str[j]-48;
    }
    strEdit += (char)a;
    i = rs+1;
    }
    m_edit = strEdit;
    ((CEdit*)GetDlgItem(IDC_EDIT1))->SetWindowText(m_edit);
    UpdateData(FALSE);
    }
    }
      

  7.   

    应该是输入66 61 ff,另外ff也不是一个可见的字符
      

  8.   

    改了一下,但是不保证所有的输入都能转换——逆向转换,应该有些字符不可见,GetWindowText也不一定能得到
    UpdateData();
    int rs=1;
    int i=0;
    CString str;
    CString strEdit;
    while(rs>0)
    {
    rs = m_edit.Find(" ",i);
    if(rs>=0)
    str = m_edit.Mid(i,rs-i);
    else
    str = m_edit.Right(m_edit.GetLength()-i);
    str.MakeUpper();
    int a=0;
    for(int j=0; j<str.GetLength(); j++)
    {
    a = 16*a;
    if(str[j]>'F')
    {
    AfxMessageBox("输入的16进制数有误");
    return;
    }
    else if(str[j]>='A')
    a += 10+(int)str[j]-65;
    else
    a += (int)str[j]-48; if(j%2)
    {
    strEdit += (char)a;
    a = 0;
    }
    }
    if(str.GetLength()%2)
    {
    if(a<255)
    strEdit += (char)a;
    }
    i = rs+1;
    }
    m_edit = strEdit;
    UpdateData(FALSE);