Comment puis-je convertir un « pointeur sur const TCHAR » à un « std :: string »?

StackOverflow https://stackoverflow.com/questions/2141848

  •  22-09-2019
  •  | 
  •  

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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top