Ich suche nach einer Methode oder einem Code-Snippet zum Konvertieren von std :: string in LPCWSTR
Ich suche nach einer Methode oder einem Code-Snippet zum Konvertieren von std :: string in LPCWSTR
Antworten:
Vielen Dank für den Link zum MSDN-Artikel. Genau das habe ich gesucht.
std::wstring s2ws(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
std::wstring stemp = s2ws(myString);
LPCWSTR result = stemp.c_str();
Die Lösung ist tatsächlich viel einfacher als alle anderen Vorschläge:
std::wstring stemp = std::wstring(s.begin(), s.end());
LPCWSTR sw = stemp.c_str();
Das Beste ist, dass es plattformunabhängig ist. h2h :)
reinterpret_cast
. Dieser Code funktioniert nicht. Verwende nicht. .
char
normalerweise als ANSI codiert. Bei der ANSI-Codierung werden die Werte 128 bis 255 unter Verwendung der aktuell aktiven Codepage interpretiert. Wenn Sie diese Werte in eine wchar_t
(UTF-16-Codierung unter Windows) verschieben, wird das gewünschte Ergebnis nicht erzielt . Wenn Sie genau sein möchten, funktioniert dies in genau 50% der Fälle. Unter Berücksichtigung der DBCS-Zeichenkodierung nimmt dieser Prozentsatz weiter ab.
Wenn Sie sich in einer ATL / MFC-Umgebung befinden, können Sie das ATL-Konvertierungsmakro verwenden:
#include <atlbase.h>
#include <atlconv.h>
. . .
string myStr("My string");
CA2W unicodeStr(myStr);
Sie können dann unicodeStr als LPCWSTR verwenden. Der Speicher für die Unicode-Zeichenfolge wird auf dem Stapel erstellt und freigegeben. Anschließend wird der Destruktor für unicodeStr ausgeführt.
Anstelle eines std :: string können Sie auch einen std :: wstring verwenden.
EDIT: Sorry, das ist nicht erklärender, aber ich muss laufen.
Verwenden Sie std :: wstring :: c_str ()
string myMessage="helloworld";
int len;
int slength = (int)myMessage.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, myMessage.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, myMessage.c_str(), slength, buf, len);
std::wstring r(buf);
std::wstring stemp = r.C_str();
LPCWSTR result = stemp.c_str();
LPCWSTR lpcwName = std :: wstring (strname.begin (), strname.end ()). C_str ()