我对编程很新,我正在尝试编写一个用户输入日期的程序,然后将该日期添加到文件目录名中,然后搜索该文件目录。
以下是我正在使用的内容。我有很多功能可以做到这一点..我已经在线搜索并尝试以不同的方式进行转换,而我只是不理解它......所以我离开了(我所知道的是未修正的)的static_cast。
也许我只是没有正确地进行转换...基本上这将把它扔回使用WINAPI处理程序的函数。我是否可以让它工作是一个完全不同的故事...提前感谢您的帮助!
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);
答案 0 :(得分:1)
TCHAR
可以是wchar_t
(当您使用Unicode时)或char
(当您使用多字节时)。
另一方面,std::wstring
始终包含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
持有wchar_t
字符)和多字节字符串(std::string
持有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;
}