从LPWSTR转换为LPTSTR
Convert from LPWSTR to LPTSTR
我正在尝试将参数LPWSTR转换为LPTSTR,有什么库可以让我轻松转换字符串吗?
如果定义了_UNICODE
,则不需要进行转换——TCHAR
是WCHAR
,LPWSTR
是LPTSTR
;否则,TCHAR
是CHAR
,而LPTSTR
是LPSTR
。在最后一种情况下,您可以使用WideCharToMultiByte API将LPWSTR
(即Unicode字符串)转换为"窄"字符串。
此外,您可以使用wcstombs
C库函数,假设Windows类型CHAR
和WCHAR
映射到C类型char
和wchar_t
(在VC++中肯定是这样),并且当前的C语言环境是您打算用于转换的语言环境。
另请参阅Alf的评论,以获得对此事的更多见解-最重要的一点是,如果可以的话,你应该避免这种转换,因为你的输出编码通常不能忠实地表示输入,而且,根据你的字符串表示的内容,这可能意味着文本混乱,找不到所需的文件,甚至更糟的是,在错误的路径上操作。
因此,将您的项目设置为使用Unicode(如@prazube的回答),并始终尝试使用支持Unicode的API,以避免这种转换。
不过,请记住,仅使用Unicode版本的Windows API可能意味着失去与Windows 9x的兼容性;这在绝大多数情况下都不是问题,但如果在应用程序中支持此类操作系统至关重要,请检查MSLU中是否支持您正在使用的API。
LPTSTR定义如下:
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif
因此,您所需要做的就是将字符集切换到Unicode。例如,在Visual Studio中,您可以转到配置属性->常规->字符集>使用Unicode字符集。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 将LPTSTR转换为长
- 如何将 LPTSTR 转换为 LPCTSTR&
- 从LPWSTR转换为LPTSTR
- 尝试将const char *转换为lptstr时的链接器错误
- 使用 ATL 将 LPTSTR 转换为 LPWSTR
- 在发布模式下无法将LPTSTR转换为std::字符串
- 如何将LPTSTR转换为LPCWSTR
- 将LPTSTR转换为字符串
- 将QString转换为LPTSTR,只显示第一个字符
- 错误 C2664:'callToPrint':无法将参数 1 从 'std::wstring' 转换为'LPTSTR'
- 错误 C2664:"HttpOpenRequestW":无法将参数 6 从"LPTSTR [2]"转换为"LPCWSTR
- 从常量字符 * 转换为 LPTSTR 而不USES_CONVERSTION
- 从 LPTSTR 转换为 tstring 会导致运行时错误
- 如何将LPTSTR转换为LPCTSTR ?