Как конфертировать из wchar_t в LPSTR? - PullRequest
6 голосов
/ 16 декабря 2011

Как преобразовать строку из wchar_t в LPSTR.

Ответы [ 2 ]

8 голосов
/ 16 декабря 2011

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();
1 голос
/ 16 декабря 2011

Я использую это

wstring mywstr( somewstring );
string mycstr( mywstr.begin(), mywstr.end() );

затем используйте его как mycstr.c_str ()

(редактировать, так как я не могу комментировать), вот как я это использовал, и он отлично работает:

#include <string>

std::wstring mywstr(ffd.cFileName);
std::string mycstr(mywstr.begin(), mywstr.end());
pRequest->Write(mycstr.c_str());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...