从LPWSTR转换为LPTSTR

时间:2012-12-16 16:38:02

标签: c++

我试图将参数LPWSTR转换为LPTSTR,那么我可以使用任何库进行简单的字符串转换吗?

2 个答案:

答案 0 :(得分:5)

如果定义_UNICODE,则无法进行转换 - TCHARWCHARLPWSTRLPTSTR;否则,TCHARCHARLPTSTRLPSTR。在最后一种情况下,您可以使用WideCharToMultiByte API将LPWSTR(即Unicode字符串)转换为“窄”字符串。

此外,您可以使用wcstombs C库函数,假设Windows类型CHARWCHAR映射到C类型charwchar_t (在VC ++中肯定是这种情况),并且当前的C语言环境是您打算用于转换的语言环境。


另请参阅 Alf 的评论,了解有关此问题的更多信息 - 最重要的一点是,如果可以的话,应该避免此类转换,因为您的输出编码在一般不能忠实地表示输入,并且,根据你的字符串代表什么,这可能意味着乱码文本以及找不到所需文件,或者更糟糕的是,在错误的路径上操作。

因此,将项目设置为使用Unicode(如 @prazuber 的答案)并始终尝试使用支持Unicode的API,以避免这种转换。

但请记住,仅使用Unicode版本的Windows API可能意味着失去与Windows 9x的兼容性;对于绝大多数情况,这不是问题,但如果在您的应用程序中支持此类操作系统至关重要,请检查MSLU中是否支持您使用的API。

答案 1 :(得分:2)

LPTSTR定义如下:

#ifdef UNICODE
 typedef LPWSTR LPTSTR;
#else
 typedef LPSTR LPTSTR;
#endif

所以你需要做的就是将你的字符集切换为Unicode。例如,在Visual Studio中,您转到配置属性 - > 一般 - > 字符集 - > 使用Unicode字符集