CString a;
a+="你们好";
如何将a中的每个中文字转换成UNICODE编码,要一个个转换出来。

解决方案 »

  1.   

    DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, a, -1, NULL, 0);
    wchar_t *pwText;
    pwText = new wchar_t[dwNum];
    MultiByteToWideChar(CP_ACP,0,a,-1,pwText,dwNum);
      

  2.   

    你用UNICODE工程,CString本身就是你wchar_t,不需要转换。
      

  3.   

    来源: http://i.mop.com/anh3000/blog/2007/02/14/3358725.htmlCString ExchangeMsg(CString msg)
    {
       CString retstr;
      
       char aa[500]="";
       int len=msg.GetLength();
       BSTR x=msg. AllocSysString();
       long num=*((long*)x-1);  
       for(int i=0;i<num;i+=1)
       {
        if(i>=len)
         break;
         char cc[10]="";
      if((*x>>8)==0)
      {
       sprintf(aa,"%s00%x",aa,*x);
         msg=msg.Right (msg.GetLength ()-1);
       
      }
      else
      {
       sprintf(aa,"%s%x",aa,*x);
       msg=msg.Right (msg.GetLength ()-2);
       i=i+1;
      }
      SysFreeString(x); 
     
      x=msg. AllocSysString();
       }
      SysFreeString(x);
       char bb[10]="";
       int len1=strlen(aa);
       char txt[500]="";
       if(len1%4!=0)
       {
        memcpy(txt,aa,(len1-3));   }
       else
       {
        memcpy(txt,aa,len1);
       }
       if(num<=0x0f)
       {
        sprintf(bb,"0%x",num);
       }
       else
       {
        sprintf(bb,"%x",num);
       }
       retstr.Format ("%s%s",bb,txt);
       retstr.MakeUpper ();
       int msglth=retstr.GetLength(); 
       return retstr;
    }
      

  4.   

    楼主,说说你用的哪个 IDE,6.0?  8.0?
      

  5.   

    ...如果你的cpp文件是unicode格式的
    那么你直接把cstring转换为byte[] 就是你要的unicode的编码无论你的字符串存在哪 源文件也好 txt也要 只要文件编码是unicode 那么转出来就是unicode如果保存字符串的文件不是unicode 自己找找第三方lib去转
      

  6.   


    CString StrOut = "";
    int length = a.GetLength();
    for(int i = 0 ; i < length; i++)
    {
    CString str = StrIn.Mid(i,1);
    unsigned char temp;
    strcpy((char*)&temp,str);
    if(temp>=128) //汉字特征
    {
    CString strchar = StrIn.Mid(i,2);
    unsigned short Hex;
    char buffer[4];
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,strchar,3,&Hex,1);
    sprintf(buffer,"%x",Hex);
    StrOut += buffer;
    StrOut += "  ";
    i++;
    }
    else
    {

    char buffer[2];
    itoa(temp,buffer,16);
    // StrOut += "00";
    StrOut += buffer;
    StrOut += "  ";
    }
    }输入a = "abc你们好"
    strOut = "61  62  63  4f60  4eec  597d"; 
      

  7.   

    用MultiByteToWideChar一起转,得到一个WCHAR数组,再逐个取数组元素。
      

  8.   

    搞定了,我是在VS2005下做的。
    发现只要a.GetBuffer()[i],就可以把所有的转换成UNICODE编码。
    但是还有一个小问题
    wchar_t a='我';
    这个可以定义,但是输出的时候不对?能帮下忙吗?
      

  9.   

    wchar_t a=L'我';应该这样吧。 
      

  10.   

    int s2u(const char* pSrc, BYTE* pDst, int nSrcLength )
    {
    int nDstLen = 0;
    int nTotal = 0;
    WCHAR *wchr;

    try
    {
    nDstLen = ::MultiByteToWideChar( CP_ACP, 0, pSrc, nSrcLength, NULL, 0 );
    wchr = new WCHAR[ nDstLen + 0x10 ]; if( wchr )
    {
    nDstLen = ::MultiByteToWideChar( CP_ACP, 0, pSrc, nSrcLength, wchr, nDstLen );
    if( nDstLen > 0 )
    {
    for(int i = 0; i < nDstLen ; i++ )
    {
    //È¡¸ßλ·ÅÔÚµÚÒ»¸öBYTE
    *(pDst++) = HIBYTE( wchr[ i ] );
    //È¡µÍλ·ÅÔÚÏÂÒ»¸öBYTE
    *(pDst++) = LOBYTE( wchr[ i ] );
    }
    delete []wchr;
    }
    else
    {
    return -1;
    }
    }
    else
    {
    nDstLen = 0;
    }

    nTotal = ( nDstLen << 1 );
    }
    catch( ... )
    {
    return -1;
    }

    return nTotal;
    }
      

  11.   

    Unicode字符常量要在字符前面加L——L'我'。
      

  12.   

    to 12楼
    请问逆过来怎么转,就是将BYTE * 转为char *