不少程序员都是从VC6.0的IDE下直接跳到VC8.0或者9.0下的。对新的IDE工程中默认的 Character Set 为 Use Unicode Character Set带来的诸多不习惯肯定深有体会。由于这个设置,我们必须要在所有的字符串前面加上宏_T()或者宏TEXT().
现在介绍一种简便的转换方法(无论什么 Character Set 都可以转换)
ANSI->Unicode
字符串
char szTemp[] = "hello world";
wchar_t szOut[0x100] = {0};
wsprintfW(szOut, L"%hs", szTemp);
单个字符
wsprintf(szOut, L"%hc", 'X');
Unicode->ANSI
字符串
wchar_t szTemp = L"hello world";
char szOut[0x100] = {0};
wsprintfA(szOut, "%ls", szTemp);
单个字符
wsprintf(szOut, "%lc", L'X');
%hs可以在任何Character Set情况下输入编码为ANSI的字符串
%ls可以在任何Character Set情况下输入编码为Unicode的字符串
同时,wsprintf这个函数最好用的地方是你可以把它当作C下的标准格式化输入sprintf来使用,除了sprintf的基本功能外,更增加了字符转换功能,非常方便。
需要注意的是,在wsprintfA中,%s默认的是ANSI,在wsprintfW中%s默认对应Unicode,如果搞混的话,会输出乱码的.
混合使用的例子:
现在,我们的工程设置Character Set为Use Unicode Character Set,有一个传入char*类型的函数,我们需要用默认的CreateFile来打开文件(Unicode下默认调用的CreateFile实际是CreateFileW)
bool Open(char* szName)
{
TCHAR szPath[0x100] = {0};
wsprintf(szPath, _T("C://Windows//System32//%hs.exe"), szName);
CreateFile(..., szPath, ...);
......
return true;
}