我正在尝试将参数LPWSTR转换为LPTSTR,有没有什么库可以让我使用它来进行简单的字符串转换?
发布于 2012-12-17 00:58:59
如果定义了_UNICODE,则无需进行转换- TCHAR是WCHAR,LPWSTR是LPTSTR;否则,TCHAR是CHAR,LPTSTR是LPSTR。在最后一种情况下,您可以使用Unicode将LPWSTR (即Unicode字符串)转换为“窄”字符串。
此外,您还可以使用Windows库函数,前提是wcstombs类型CHAR和WCHAR映射到C类型char和wchar_t (在VC++中肯定就是这种情况),并且当前的C语言环境是您打算用于转换的语言环境。
另请参阅Alf的评论,以了解更多关于这个问题的见解--最重要的一点是,如果你可以,你应该避免这样的转换,因为你的输出编码通常不能真实地表示输入,根据你的字符串代表什么,这可能意味着乱码文本,以及找不到所需的文件,或者更糟糕的是,在错误的路径上操作。
因此,将您的项目设置为使用Unicode (如@prazuber的答案所示),并始终尝试使用支持Unicode的API,以避免此类转换。
不过,请记住,仅使用Windows的Unicode版本可能意味着失去与Windows9x的兼容性;这在绝大多数情况下不是问题,但如果在应用程序中支持这样的OSes很重要,请检查MSLU是否支持您正在使用的API。
发布于 2012-12-17 00:51:57
LPTSTR的定义如下:
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif因此,您需要做的就是将字符集转换为Unicode。例如,在Visual Studio中,您可以转到“配置”>“属性”>“常规->字符集”>“Use Unicode Character Set ->”。
https://stackoverflow.com/questions/13903297
复制相似问题