在C ++中将TCHAR转换为字符串

Converting TCHAR to string in C++

我正在尝试将TCHAR转换为字符串,如下所示:

1
2
3
std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );

我需要将mypath设置为path的值。 我做了一个简单的循环,将path[index]连接到mypath,这可行,但是我不喜欢这种方式。

我是C ++的新手,但是已经做了大量的C#。 我已经看过GetModuleFileName传递"字符"的示例,但它不喜欢它。 它需要TCHARLPWSTR


TCHAR是定义为char或wchar的宏,具体取决于您定义的字符集。 2008年之后的默认值是将字符设置为unicode。如果您更改字符集,则此代码有效。

1
2
3
4
5
int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR* bob ="hi";
    string s = bob;    
}

右键单击项目设置并更改以下内容

enter image description here

如果要使用TCHAR作为Unicode字符集,请使用wstring


当我真的需要这样做时,请使用以下命令:

1
2
TCHAR  infoBuf[32767];
GetWindowsDirectory(infoBuf, 32767);

然后将其转换为可以转换为标准std::string的wstring:

1
2
wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.

如果要使用chars作为路径,则应调用GetModuleFilenameA。该函数使用LPSTR而不是LPTSTR

请注意,几乎所有使用或返回字符串的Win32函数都有两个版本,一个以A(ANSI?)结尾,另一个以W(宽)结尾。


您还可以使用wcstombswcstombs_s函数将_TCHAR*转换为char*

http://msdn.microsoft.com/zh-CN/library/5d7tc9zw%28v=vs.80%29.aspx


您好,这是一个较晚的答案,但我有个主意。

1
2
3
4
{wstring test = User;
 std::wcout << test << std::endl;
 string test2(test.begin(), test.end());
 std::cout << test2 << std::endl;}

在此示例中,用户是用户名TCHAR
现在,我可以将名称用作stringwstring
这是将TCHAR转换为string的最简单方法。