//MultiByteToWideChar用于将多字节字符串转换成宽字符串;函数WideCharToMultiByte将宽字符串转换成等价的多字节字符串。
//wcsset的作用是“Set characters of a string to acharacter”,也就是说它会把str看作一个指向Unicode字符串的指针一直清零下去,直到遇到"\0\0"标志为止。
//字符串转换宏,使用时请参照MSDN
//新字符串转换类和宏的名称采用以下形式:C SourceType 2[C]DestinationType[EX]
[C] 在目标类型必须是常量时存在。
[EX] 在缓冲区初始大小必须指定为模板参数时存在。
//如:若要从 Unicode 字符串转换为通用字符串,而无需更改转换的字符串,请使用 CW2A
//可以用于大字符串。 字符串将在堆上分配,请使用CW2AEX
//This function maps a character string to a wide-character (Unicode) string.
char *str = "这是一种非常酷的字方式";
TCHAR *m_str = _T("aaa");
WCHAR buffer[1024];
memset(buffer,0,1024 * sizeof(WCHAR));//wcsset不太安全
MultiByteToWideChar(CP_ACP,0,(char*)LPCSTR(str),(int)strlen((char*)LPCSTR(str)),buffer,1024);
//CP_ACP ANSI code page</span>
//wcsset的作用是“Set characters of a string to acharacter”,也就是说它会把str看作一个指向Unicode字符串的指针一直清零下去,直到遇到"\0\0"标志为止。
//字符串转换宏,使用时请参照MSDN
//新字符串转换类和宏的名称采用以下形式:C SourceType 2[C]DestinationType[EX]
[C] 在目标类型必须是常量时存在。
[EX] 在缓冲区初始大小必须指定为模板参数时存在。
SourceType/DestinationType | 描述 |
A | ANSI 字符串。 |
U | Unicode 字符串。 |
T | 通用字符串(定义 _UNICODE 时与 W 等效,否则与 A 等效)。 |
//如:若要从 Unicode 字符串转换为通用字符串,而无需更改转换的字符串,请使用 CW2A
//可以用于大字符串。 字符串将在堆上分配,请使用CW2AEX
// Convert LPCWSTR(const WCHAR*) to LPCSTR(const CHAR*).
//MACRONAME( string_address )
LPCWSTR m_wstr = L"Testing";
CW2A m_mstr(m_wstr);
<pre name="code" class="cpp">typedef CA2WEX<> CA2W;
template< int t_nBufferLength = 128 >
class CW2AEX{
WideCharToMultiByte( nConvertCodePage, 0, psz, nLengthW, NULL, 0, NULL, NULL )
}
用CT2W,或CT2A更为简单
CString hex = _T("FAB");
CString decimal = _T("4011");
ASSERT(_tcstoul(hex, 0, 16) == _ttoi(decimal));</span>