Konvertieren WCHAR[260] std::string
Habe ich so WCHAR[MAX_PATH] aus (PROCESSENTRY32) pe32.szExeFile auf Windows. Folgende funktionieren nicht:
std::string s;
s = pe32.szExeFile; //compile error. cast (const char*) doesnt work either
und
std::string s;
char DefChar = ' ';
WideCharToMultiByte(CP_ACP,0,pe32.szExeFile,-1, ch,260,&DefChar, NULL);
s = pe32.szExeFile;
Tun Sie es wirklich brauchen als
std::string
? Es konvertiert direkt zu einem std::wstring
wie in std::wstring s(pe32.szExeFile);
InformationsquelleAutor user1334943 | 2012-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren Anruf
WideCharToMultiByte
korrekt aussieht, sofernch
ist einausreichend großer Puffer. Nachdem, als, jedoch, die Sie zuweisen möchten
Puffer (
ch
) der string (oder verwenden Sie es zum erstellen eines Strings), nichtpe32.szExeFile
.InformationsquelleAutor James Kanze
Für Ihr erstes Beispiel können Sie nur:
und zum zweiten:
als
std::wstring
hat einechar*
ctorsorry sollte verwendet habe wstring-version, sollte jetzt kompilieren
funktioniert es mit
std::wstring s(&pe32.szExeFile)
?InformationsquelleAutor EdChum
Gibt es bequeme Konvertierung von ATL-Klassen; Sie verwenden möchten, können Sie einige von Ihnen, z.B.:
Beachten Sie jedoch, dass eine Konvertierung von Unicode UTF-16, ANSI werden kann verlustbehaftete. Wenn Sie wan ' T eine verlustfreie Konvertierung können Sie konvertieren von UTF-16 zu UTF-8, und speichern UTF-8 inside
std::string
.Wenn Sie nicht möchten, zu verwenden, ATL, gibt es einige günstige, frei verfügbare C++ - Wrapper um raw Win32
WideCharToMultiByte
zu konvertieren von UTF-16 zu UTF-8 mit STL-strings.InformationsquelleAutor
und verwenden Sie diese Vorlage wie folgt
InformationsquelleAutor S.JOURNAUX