C++ 将wstring转换为TCHAR的问题
我对编程相当陌生,我正在尝试编写一个程序,其中用户输入一个日期,然后将该日期添加到文件目录名中,然后搜索该文件目录 下面是我正在处理的问题。我有很多函数可以实现这一点。。我在网上搜索了一下,尝试了几种不同的转换方式,但我就是不明白。。。。所以我停止了(我所知道的是未纠正的)静态施法 也许我只是做得不对。。。基本上,这会将其返回到使用WINAPI处理程序的函数。我是否能让它工作完全是另一回事。。。提前感谢您的帮助C++ 将wstring转换为TCHAR的问题,c++,cstring,wstring,tchar,C++,Cstring,Wstring,Tchar,我对编程相当陌生,我正在尝试编写一个程序,其中用户输入一个日期,然后将该日期添加到文件目录名中,然后搜索该文件目录 下面是我正在处理的问题。我有很多函数可以实现这一点。。我在网上搜索了一下,尝试了几种不同的转换方式,但我就是不明白。。。。所以我停止了(我所知道的是未纠正的)静态施法 也许我只是做得不对。。。基本上,这会将其返回到使用WINAPI处理程序的函数。我是否能让它工作完全是另一回事。。。提前感谢您的帮助 wstring fDate; wstring fileDin; const TCH
wstring fDate;
wstring fileDin;
const TCHAR* s = _T (fileDin);
std::wstring(fDate);
std::wstring(fileDin) =L"Z:\\software\\A\\AC\\" + fDate;
wcout<< fileDin;
cout <<endl;
//wstring fileDin(&arc[1]);
fileDin = static_cast<TCHAR>(arc[1]);
dir(2, arc);
wstring-fDate;
wstringfiledin;
常量TCHAR*s=\u T(fileDin);
std::wstring(fDate);
std::wstring(fileDin)=L“Z:\\software\\A\\AC\\\”+fDate;
wcoutTCHAR
可以是wchar\u t
(使用Unicode时)或char
(使用多字节时)。
另一方面,std::wstring
总是包含wchar\u t
类型的字符,因此最好直接使用wchar\u t*
而不是TCHAR*
(如果可能的话)
然后可以使用std::wstring
的构造函数将wchar\u t*
转换为std::wstring
:
wchar_t* wcstr = L"my string";
std::wstring wstr(wcstr);
和std::wstring
到wchar\u t*
通过简单调用c\u str()
方法:
wchar_t* wcstr = wstr.c_str();
然后,有时您可能需要在“宽”字符串(std::wstring
s holdingwchar\t
characters)和多字节字符串(std::string
s holdingchar
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;
}
基于编译时没有错误的\T(fileDin)
这一事实,必须将配置设置为TCHAR
为char
。不幸的是,这意味着这个答案行不通。@Markransem:说得好。我仍然认为在大多数情况下,显式地使用wchar\u t*
或char*
比使用TCHAR
更简单,因此更好。同意,TCHAR
是很久以前的遗物。不幸的是,我们中的许多人仍然使用那些时代的代码库,为了保持一致性,我们需要继续使用它们。不幸的是,这是我在使用FindFirstFile()或FindNextFile()时得到的代码,我花了很长时间才掌握了这个窍门。如果有一种更简单的方法从目录中搜索和提取我不知道的文件名,我可能能够绕过整个函数。我可以尝试使用wchar\u t*重写,如果它能满足我的需要。在您的情况下,最好避免使用TCHAR