CString m_sAsc;
CString m_sTest;
从文件中读出
m_sAsc="9798"
m_sAsc为ASCII码的字符串,表示ab
现在如何才能使m_sTest的值为m_sAsc中表示的值,即m_sTest="ab";
谢谢!

解决方案 »

  1.   

    这个问题如果包括小于0x20的值得字符的话,就需要特殊的编码了!
    如果没有则代表这是从空格开始的字符串!
    就是判断第一个字符的大小如果在0x41和0x61开始的区域,可以认为是字符,
    str.append,就可以,
      

  2.   

    char* src = "9798";
    char des[2];
    char* temp = src;
    char* cEnd = src + strlen(src);int pos = 0;
    BYTE by;
    while ( *temp && temp < cEnd - 1 )
    {
        by = *( (BYTE*)(temp+2) );
        *(temp+2) = 0;
        des[pos] = atoi( temp );
        pos++;
        *( (BYTE*)(temp+2) ) = by;
        temp += 2;
    }
      

  3.   

    //下面代码即可将“9798”转换为“ab”,传入参数为"9798"返回“ab”CString CTestDlg::BinToChar(CString str)
    {
        if(str.GetLength()<=0)
        {
            CString temp="";
            return temp;
        }
        char *ch=new char[str.GetLength()/2];
        for(int i=0;i<str.GetLength()/2;i++)
        {
            int aa=0;
            for(int j=0;j<2;j++)
            {
                aa=aa*16;
                if((str[i*2+j]>='a') && (str[i*2+j]<='f')) aa=aa+str[i*2+j]-'a'+10;
                else if((str[i*2+j]>='A') && (str[i*2+j]<='F')) aa=aa+str[i*2+j]-'A'+10;
                else if((str[i*2+j]>='0') && (str[i*2+j]<='9')) aa=aa+str[i*2+j]-'0';
            }
            ch[i]=aa;
        }
        CString ttemp(ch,str.GetLength()/2);
        return ttemp;

      

  4.   

    我觉得上面的算法可能有问题,因为如果char *src="100101",也就是des="ef"时,应该和“9798”有所不同了。这个问题还要再仔细推敲一下!
      

  5.   

    如果char *src="100101"当然会有问题
    可这是题目本身问题看看char * src = "11111";
    那应该怎样分呢,应该分成 11 + 111 还是 111 + 11
      

  6.   

    我说的把ab的ASCII码转换为字符串“ab”是举个例子而已。
    实际应用中是把一串ASCII码作为参数传递给一个函数,然后这个函数再把这串ASCII码转换成字符串并返回这个字符串。如何实现?谢谢!
      

  7.   

    用ASCII码方式打开不就可以了?
    搞不懂。。