从LPWSTR转换为LPTSTR

Dar*_*age 3 c++

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

Mat*_*lia 5

如果_UNICODE定义了没有转换要做 - a TCHAR 是a WCHAR,而且LPWSTRLPTSTR; 否则,TCHARCHAR,LPTSTRLPSTR.在最后一种情况下,您可以使用WideCharToMultiByte API将LPWSTR(即Unicode字符串)转换为"窄"字符串.

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


另请参阅Alf关于此事的更多见解的评论 - 最重要的一点是,如果可以,您应该避免这种转换,因为您的输出编码通常不能忠实地表示输入,并且,根据您的字符串代表的内容,这可能意味着乱码文本以及找不到所需文件,或者更糟糕的是,在错误的路径上操作.

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

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