怎么把CString转换成unicode   (VC)
具体的方法,最好还有例程。
呵呵,谢谢了!

解决方案 »

  1.   

       CString strTmp;
        CString m_ANSI = "你好!测试,hello";      
        DWORD dwNum;
        dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, NULL, 0);
        wchar_t *pwText;
        pwText = new wchar_t[dwNum];
        dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, pwText, dwNum); 
            //unicode内容在pwText中,下面显示代码
        CString m_Unicode = "";
        for(int i = 0; i < (int)dwNum - 1; i++)  
        {
            strTmp.Format("%04X ", pwText[i]);
            m_Unicode += strTmp;
        }
        delete[] pwText;
      

  2.   

    如果你的工程是unicode的
    cstring就会自动转为Unicode
      

  3.   

    如果你的工程是unicode的
    cstring就会自动转为Unicode
      

  4.   

    如果工程是Unicode字符串,那么CString默认就是Unicode的
    而如果工程是ansi字符串,那么CString就需要转换,通过MultiByteToWideChar转换成宽字符数组,
      

  5.   

    如果工程是ansi字符串,那么CString就需要转换,可以用CA2W宏,这样比较简单CString   str   =   _T("AAA");  
    LPCWSTR   lpwIP   =     CA2W(str);
      

  6.   

     TCHAR szFullFileName[200];
     wcscpy(szFullFileName, _T("\\Storage Card\\") ); 
      

  7.   

    unicode又不是unicode字符串
      

  8.   

    就是一个CString的字符串,里边有汉字、英文、数字、特殊符号等,然后把每个字都转换成unicode。
      

  9.   

    MultiByteToWideChar
    不是好多人说了么?
      

  10.   

    楼主你对unicode的理解上貌似有偏差!
    uncode是一种编码方式而已,假如你的工程是unicode的,那就不用转了,Cstring就是那么存的
    假如你的工程是多字节的,你可以把它转成unicode的字符串,这和你的字符串里面是什么形式无关
      

  11.   

    CA2W是一种方式,不过还有一个更好的封装类叫 _bstr_t。 定义在 <comdef.h>。_bstr_t 类 可以接受 char* 或者 wchar_t*作为构造参数;可以返回 char* 或者 wchar_t*类型的字符串。 总之不论是 ansi,还是unicode,他都通吃就对了。
      

  12.   

    http://topic.csdn.net/u/20090428/09/ea1972a8-778d-4f8a-91f7-07409479fc64.html
      

  13.   

    用CString的AllocSysString()成员函数转换成BSTR数据类型就可以。
      

  14.   

    实际4、5楼都不是好办法,因为他们都需要判断当前的编译类型是不是unicode的,对于CString,我们其实不应该假定他是unicode还是MBCS,我们应该使用T2W这样的垫片宏转换在编程实践中,应该努力避免写出对是否是unicode敏感的程序,1楼的下面代码就是一个非常非常不好的例子: CString m_ANSI = "你好!测试,hello";    //假定是MBCS
    楼主正确用法是 CString str = _T("你好!测试,hello"); //注意_T
    WCHAR* pwstr = T2W(str); //从T转换为W,而不是A到W
      

  15.   

    俺也顶,不过返回的BSTR在不需要的时候需要释放,如下例:CString szText;
    szText = ....;
    BSTR bstrText = szText.AllocSysString();
    //使用bstrText 
    ....
    FreeSysString(bstrText);