关于Unicode我一直不大理解,我只知道他是双字节的,可是我在用CString时一点都体会不到他的好处在哪里,比如 CString str = _T("ABC"); 尽管我再文件头定义了#define  _UNICODE, 可是在进行Left、Delete时还是按照8字节来处理的,纯英文还好说,可是在中英为混合处理字符串时仍感到非常不便,如何能将A这样的单字节字符在CString理将其转化成双字节的?

解决方案 »

  1.   

    CString内部存储的都是8字节,当是CString str = _T("ABC"); 时如果定义了UNCODE他只是把_T("ABC")字符串转换成8字节的。所以无法在CString中存双字节的形式的
      

  2.   

    如何将 CString str = "ABC" 中的字符变成Unicode的?
    即 int nLen = str.GetLength(); 后的nLen = 6, 解决问题后立刻给分!!
      

  3.   

    一个很简单的办法:用编译器支持的_bstr_t类,它是对windows基本数据类型BSTR的封装,BSTR是一个指针,其指向双字节字符串,但是字符串前面有四个字节的头,表示这个双字节字符串的长度。需要注意的是,用BSTR类型是,必须要用api函数来分配内存和释放内存,可以参考msdn和com的有关资料,对BSTR有介绍,当然用_bstr_t比较容易一些(用_bstr_t之前需要有#include <comdef.h>)。
    // example:
    #include <iostream>
    #include <comdef.h>
    using namespace std;void main(void) {
    _bstr_t bstr(L"ABC中国123");
    cout << bstr.length() * sizeof(wchar_t) << endl;
    }// output: 16
      

  4.   

    project settings->preprocessor中加_UNICODE