TCHAR和CHAR类型的互转,string 转lpcwstr
https://www.cnblogs.com/yuguangyuan/p/5955959.html
没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换。
void TcharToChar(const TCHAR * tchar, char * _char) { int iLength; //获取字节长度 iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL); //将tchar值赋给_char WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, iLength, NULL, NULL); } void CharToTchar(const char * _char, TCHAR * tchar) { int iLength; iLength = MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, NULL, 0); MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, tchar, iLength); }
表明 TCHAR 与 WCHAR 属同一类型
char szA[100]; // ANSI string buffer
WCHAR szW[100]; // Unicode string buffer
// Normal sprintf:all strings are ANSI
sprintf(szA, "%s","ANSI Str");
// Converts Unicode string to ANSI
sprintf(szA,"%S",L"Unicode Str");
// Normal swprintf:all strings are Unicode
swprintf(szW,L"%s",L"Unicode Str");
// Converts ANSI string to Unicode
swprintf(szW,L"%S", "ANSI Str");
注意:大写S 和小写s 的使用
string 转lpcwstr
LPCWSTR stringToLPCWSTR(std::string orig) { wchar_t *wcstring = 0; try{ size_t origsize = orig.length() + 1; const size_t newsize = 100;size_t convertedChars = 0; if (orig == ""){wcstring = (wchar_t *)malloc(0); mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE); } else{ wcstring = (wchar_t *)malloc(sizeof(wchar_t)*(orig.length() - 1)); mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE); } } catch (std::exception e) {} return wcstring; }
std::string to_s(LPCWSTR ws) { DWORD length = WideCharToMultiByte(CP_OEMCP, NULL, ws, -1, NULL, 0, NULL, FALSE); std::string result(length, 0); WideCharToMultiByte(CP_OEMCP, NULL, ws, -1, &result[0], length, NULL, FALSE); result.erase(result.size() - 1, 1); return result; } std::wstring to_ws(LPCSTR str) { int length = MultiByteToWideChar(GetACP(), 0, str, -1, NULL, 0); std::wstring result(length, 0); MultiByteToWideChar(GetACP(), 0, str, -1, &result[0], length); return result; }