Comment puis-je convertir un « pointeur sur const TCHAR » à un « std :: string »?
Question
J'ai une classe qui renvoie un pointeur typé à un « const TCHAR ». Je dois le convertir en un std :: string, mais je ne l'ai pas trouvé un moyen pour y arriver.
Quelqu'un peut-il donner un aperçu sur la façon de le convertir?
La solution
En fonction de vos paramètres de compilation, TCHAR
est soit un char
ou un WCHAR
(ou wchar_t
).
Si vous utilisez le paramètre de chaîne de caractères multi octets, votre TCHAR
est le même que char. Ainsi, vous pouvez simplement mettre votre chaîne à la TCHAR*
retourné.
Si vous utilisez le paramètre de chaîne de caractères unicode, votre TCHAR
est un grand omble chevalier et doit être converti en utilisant WideCharToMultiByte .
Si vous utilisez Visual Studio, que je suppose que vous êtes, vous pouvez modifier ce paramètre dans les propriétés du projet sous Jeu de caractères.
Autres conseils
Faites tout Brian dit. Une fois que vous obtenez dans la page de code dont vous avez besoin, vous pouvez le faire:
std::string s(myTchar, myTchar+length);
ou
std::wstring s(myTchar, myTchar+length);
pour le faire entrer dans une chaîne.
Vous pouvez également utiliser les macros de conversion de texte ATL à portée de main pour cela, par exemple:.
std::wstring str = CT2W(_T("A TCHAR string"));
CT2W = Const Texte à large.
Vous pouvez également spécifier une page de code pour la conversion, par exemple.
std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE);
Ces macros (sous leur forme actuelle) sont disponibles pour Visual Studio C ++ projets depuis VS2005.
Cela dépend. Si vous ne l'avez pas défini _UNICODE
ou UNICODE
alors vous pouvez faire une chaîne contenant le caractère comme ceci:
const TCHAR example = _T('Q');
std::string mystring(1, example);
Si vous avez utilisez _UNICODE
et UNICODE
alors cette approche peut fonctionner, mais le personnage ne doit pas être à un convertable char
. Dans ce cas, vous aurez besoin de convertir le caractère à une chaîne. En général, vous devez utiliser un appel comme wcstombs
ou WideCharToMultiByte
qui vous donne un contrôle plus complet sur l'encodage.
De toute façon, vous devez allouer un tampon pour le résultat et la construction de la std::string
de ce tampon, ne pas oublier de libérer le buffer une fois que vous avez terminé (ou utiliser quelque chose comme vector<char>
pour que cela se fait automatiquement).