Unicode宽字符转化

// 把宽字符转化为ANSI字符串
WideCharToMultiByte( CP_ACP, 0, lpcwStr, -1, lpStr, sizeof(lpStr), NULL, NULL );

// 把ANSI字符串转化为宽字符
MultiByteToWideChar( CP_ACP, 0, lpcStr, -1, lpwStr, sizeof(lpwStr) );

int <— _ttoi <— CString
double <— _tcstod <— CString
CString <— .Format <— int
CString <— .Format <— double

为支持Unicode做准备,除个别必须使用 char 或 char* 的地方外,
其它地方请依照如下标准:

1.字符串类型尽量用CString
2.字符类型使用 TCHAR
3.字符串数组用 TCHAR[]
4.字符串指针用 TCHAR*
5.常量字符串指针用 const TCHAR*
6.字符串常量和字符常量加宏 _T

特别的:
1>CString::Format(_T("..."),...)//要加_T
2>LPTSTR 等等被多次嵌套定义过的宏尽量少用,用基础类型 const TCHAR*(或TCHAR*)替代;
3>为TCHAR*类型指针分配 N-1 个字符的空间: TCHAR* pbuffer = new TCHAR[ N*sizeof(TCHAR) ];

常用字符串函数,须使用支持Unicode/Ansi的宏函数替换前者:

 Ansi字符串函数 Unicode/Ansi宏函数  功能说明 
 strcpy  _tcscpy      字符串拷贝
 strcat  _tcscat      字符串连接
 strlen  _tcslen       求字符串长度
 strcmp  _tcscmp     字符串比较
 atof  _tcstod (注)  字符串转换为double
 atoi  _ttoi  字符串转换为int
注:上表中 _tcstod 和 atof用法不同,不能直接替换。


LPCTSTR 使用UELPCTSTR代替
std::string 使用UeStdString代替
这个需要加ShareHeader.h头文件
#ifdef UNICODE
typedef std::wstring UeStdString;
#define UELPCSTR LPCWSTR
#else
typedef std::string UeStdString;
#define UELPCSTR LPCTSTR
#endif

你可能感兴趣的:(Windows)