如何将CString转换成WCHAR

转载:http://bbs.csdn.net/topics/100075810          八楼的答案

如果你使用VC2002(2003更好)或以上的话,CString转WCHAR简单的很:

1,假设你的程序是MBCS编译,并且不打算兼容UNICODE的话,那么:

{
    USES_CONVERSION;
    
    CString sText = "text string";
    WCHAR wszWideString[N];

    wcscpy(wszWideString, CA2CW(sText));
}

2,假设你的程序是UNICODE编译,或者MBCS、UNICODE兼容的话,那么:

{
    USES_CONVERSION;
    
    CString sText = _T("text string");
    WCHAR wszWideString[N];

    wcscpy(wszWideString, CT2CW(sText));
}

所以,你应该到MSDN里查询如下关键字即可:

1, USES_CONVERSION
2, CA2CW (会看到一族 X2X 函数)

VC2002里的这族函数在类型转换上有些缺陷,但是调用时自行强制后就没问题了,2003里彻底没有缺陷了。

这些要归功于升级改版后的ATL。

最后,这些函数归根到底是基于API MultiByteToWideChar/WideCharToMultiByte的,在Windows中是需要安装有相应的码表才能正确转换的。

比如说,你的程序是MBCS编译的,你的 CHAR[] 字符串里的中文是GB2312编码的,在纯英文Windows下(纯英文是指没有安装中文码表时),CA2CW()或MultiByteToWideChar()是都不能正确转换的!

所以说,如果你只是被迫需要兼容一些第三方API调用,可以使用一下上述转换方法。但是对于跟语言文字、字符串息息相关的程序模块来说,要想走向世界,一定要用UNICODE编译!

原文地址:https://www.cnblogs.com/ldjhust/p/3193475.html