TCHAR
可以是wchar_t
(当您使用 Unicode 时)或char
(当您使用多字节时)。
另一方面,std::wstring
总是包含 type 的字符wchar_t
,所以最好wchar_t*
直接使用而不是TCHAR*
(如果可能的话)。
然后可以通过使用以下构造函数来完成wchar_t*
转换:std::wstring
std::wstring
wchar_t* wcstr = L"my string";
std::wstring wstr(wcstr);
并std::wstring
通过wchar_t*
简单的调用c_str()
方法:
wchar_t* wcstr = wstr.c_str();
然后有时您可能需要在“宽”字符串(std::wstring
s 保存wchar_t
字符)和多字节字符串(std::string
s 保存char
s)之间进行转换。我通常使用以下助手:
// multi byte to wide char:
std::wstring s2ws(const std::string& str)
{
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
std::wstring wstrTo(size_needed, 0);
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
return wstrTo;
}
// wide char to multi byte:
std::string ws2s(const std::wstring& wstr)
{
int size_needed = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), int(wstr.length() + 1), 0, 0, 0, 0);
std::string strTo(size_needed, 0);
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), int(wstr.length() + 1), &strTo[0], size_needed, 0, 0);
return strTo;
}