A wchar_t
строка состоит из 16-битных единиц, a LPSTR
- указатель на строку октетов, определенную так:
typedef char* PSTR, *LPSTR;
Важно то, что LPSTR может заканчиваться нулем.
При переводе с wchar_t
на LPSTR
вы должны решить, какую кодировку использовать. После этого вы можете использовать функцию WideCharToMultiByte
для преобразования.
Например, вот как перевести строку широких символов в UTF8, используя строки STL для упрощения управления памятью:
#include <windows.h>
#include <string>
#include <vector>
static string utf16ToUTF8( const wstring &s )
{
const int size = ::WideCharToMultiByte( CP_UTF8, 0, s.c_str(), -1, NULL, 0, 0, NULL );
vector<char> buf( size );
::WideCharToMultiByte( CP_UTF8, 0, s.c_str(), -1, &buf[0], size, 0, NULL );
return string( &buf[0] );
}
Вы можете использовать эту функцию для перевода wchar_t*
в LPSTR
следующим образом:
const wchar_t *str = L"Hello, World!";
std::string utf8String = utf16ToUTF8( str );
LPSTR lpStr = utf8String.c_str();