2010-01-26 15 views
4

J'ai une classe qui renvoie un pointeur typé à un "const TCHAR". J'ai besoin de le convertir en chaîne std :: mais je n'ai pas trouvé le moyen de le faire.Comment convertir un "pointeur en const TCHAR" en un "std :: string"?

Quelqu'un peut-il donner un aperçu sur la façon de le convertir?

+0

Créer une nouvelle chaîne std :: avec le TCHAR retourné comme valeur initiale: TCHAR xyz = fun(); chaîne transforméeforme (xyz); ? – Leonidas

Répondre

10

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 identique à un caractère. Vous pouvez donc simplement définir votre chaîne sur le TCHAR* renvoyé.

Si vous utilisez le paramètre de chaîne de caractères Unicode, votre TCHAR est un caractère large et doit être converti en utilisant WideCharToMultiByte.

Si vous utilisez Visual Studio, ce que je suppose être, vous pouvez modifier ce paramètre dans les propriétés du projet sous Jeu de caractères.

+0

Voici ce que j'ai fait: #if! Defined (UNICODE) || !défini (_UNICODE) const std :: string k_Var (reinterpret_cast (Var2.ReturnsAConstTCHAR())); #endif – TERACytE

+0

Oups. Cela devrait lire "static_cast" pas "reinterpret_cast". – TERACytE

1

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 celui-ci:

const TCHAR example = _T('Q'); 
std::string mystring(1, example); 

Si vous utilisez _UNICODE et UNICODE alors cette approche peut fonctionner, mais le personnage ne doit pas être à convertable un char. Dans ce cas, vous devrez convertir le caractère en une chaîne. En règle générale, 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 devrez allouer un tampon pour le résultat et construire le std::string à partir de ce tampon, en vous souvenant de libérer le tampon une fois que vous avez terminé (ou utilisez quelque chose comme vector<char> pour que cela se fasse automatiquement).

3

Faites tout ce que Brian dit. Une fois que vous obtenez dans la page de code dont vous avez besoin, vous pouvez faire:

std::string s(myTchar, myTchar+length); 

ou

std::wstring s(myTchar, myTchar+length); 

pour l'obtenir dans une chaîne.

3

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 Text To large.

Vous pouvez également spécifier une page de codes pour la conversion, par ex.

std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE); 

Ces macros (sous leur forme actuelle) sont disponibles pour les projets Visual Studio C++ depuis VS2005.