C ++中的字符串类型:如何从LPWSTR转换为LPSTR?

时间:2014-08-28 13:29:17

标签: c++ windows string

我正在调用返回LPWSTR的C ++方法(该字符串包含文件路径),但我需要将其转换为LPSTR才能继续。

我以前从未使用过C ++,即使这里详细解释了不同的字符串类型:http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc,我感到很困惑。

当我将LPWSTR转换为LPTSTR(在我的应用中应该等于LPSTR)时,我只得到一个Unicode符号。虽然我认为在这种情况下转换是不合适的,但我不明白为什么它只返回一个字符而不是将LPWSTR的所有2字节字符解释为1字节字符。我找到了对WideCharToMultiByte函数的引用,它显然可以将LPWSTR转换为std::string,而我又无法转换为LPSTR

LPSTR获取LPWSTR是否有一种简单的方法?

1 个答案:

答案 0 :(得分:1)

将指针转换为另一种类型的指针不会改变或转换原始指针所指向的内容。

您应该可以在c_str()上致电std::string,并将其投放到LPSTR,我认为。因此,使用WideCharToMultiByte(如果确实如此,转换为std::string)并在结果上调用c_str。这将为您提供一个常量字符串指针(LPCSTR)。您可以复制它(例如通过strdup)并将结果转换为LPSTR

返回的指针将引用使用strdup分配的字符串,因此在不再需要该字符串的某个时刻应该传递给free

我熟悉的来自Windows API的WideCharToMultiByte函数(请参阅documentation)直接从宽字符字符串转换为多字节编码字符串,而无需通过std::string ,虽然它仍然需要分配缓冲区来保存输出字符串。您也许可以使用它。