Convertir WCHAR[260] à std::string
J'ai obtenu un WCHAR[MAX_PATH] de (PROCESSENTRY32) pe32.szExeFile sur Windows. Le suivant ne fonctionne pas:
std::string s;
s = pe32.szExeFile; //compile error. cast (const char*) doesnt work either
et
std::string s;
char DefChar = ' ';
WideCharToMultiByte(CP_ACP,0,pe32.szExeFile,-1, ch,260,&DefChar, NULL);
s = pe32.szExeFile;
Avez-vous vraiment besoin d'un
std::string
? Il doit convertir directement à un std::wstring
, comme dans std::wstring s(pe32.szExeFile);
OriginalL'auteur user1334943 | 2012-04-18
Vous devez vous connecter pour publier un commentaire.
Votre appel à
WideCharToMultiByte
semble correct, à conditionch
est untampon suffisamment larges. Après que, toutefois, vous souhaitez attribuer le
tampon (
ch
) de la chaîne (ou de l'utiliser pour construire une chaîne), paspe32.szExeFile
.OriginalL'auteur James Kanze
Pour votre premier exemple, vous pouvez simplement faire:
et pour la deuxième:
comme
std::wstring
a unchar*
ctordésolé si j'ai utilisé wstring version, devrait compiler maintenant
est-ce de travailler avec
std::wstring s(&pe32.szExeFile)
?OriginalL'auteur EdChum
Il y a de pratique la conversion des classes à partir d'ATL; vous pouvez utiliser certains d'entre eux, par exemple:
Note cependant qu'une conversion Unicode UTF-16 ANSI peut être avec perte. Si vous wan est pas un non-destructive conversion, vous pouvez convertir en UTF-16 pour de l'UTF-8, et de stocker de l'UTF-8 à l'intérieur de
std::string
.Si vous ne souhaitez pas utiliser ATL, il y a quelques pratique librement disponible C++ wrappers autour de raw Win32
WideCharToMultiByte
à convertir en UTF-16 pour de l'UTF-8 à l'aide de chaînes de caractères STL.OriginalL'auteur
et de l'utilisation de ce modèle comme suit
OriginalL'auteur S.JOURNAUX