Comment faire pour convertir un TCHAR tableau à std::string?
Comment puis-je convertir un TCHAR
tableau de std::string
(ne pas std::basic_string
)?
- Vous vous rendez compte std::string est juste un typedef pour un std::basic_string<char>?
- Et voulez-vous convertir un spécifiquement Unicode ou MBCS TCHAR (c'est à dire vraiment WCHAR ou CHAR) dans un std::string (c'est à dire char) toujours, ou les convertir en CHAR à la chaîne et WCHAR à wstring, ou quelque chose d'autre?
Vous devez vous connecter pour publier un commentaire.
TCHAR
est juste une définition de type qui, en fonction de votre configuration de la compilation, soit par défautchar
ouwchar
.Bibliothèque de modèles Standard prend en charge les deux ASCII (avec
std::string
) et les jeux de caractères (avecstd::wstring
). Tout ce que vous devez faire est de typedef Chaîne std::string ou std::wstring en fonction de votre configuration de la compilation. Pour maintenir la souplesse, vous pouvez utiliser le code suivant:Vous pouvez maintenant utiliser
String
dans votre code et de laisser le compilateur gérer le méchant pièces. La chaîne aura maintenant les constructeurs qui vous permet de convertirTCHAR
àstd::string
oustd::wstring
.String
travailler aveccout
en Unicode environnement?typedef std::wcout std_tcout
etstd_tstring
etc? Je ne peux pas... me mettre à la façade d'un standard du genre. Puis de nouveau, j'ai l'habitude de le faire pour les opérations graphiques de tous les temps. Pourquoi ne passtd::basic_string<TCHAR>
pour la première moitié de la définition de type de chaîne est-il une différence visible?std::wstring
etstd::string
, en supposant que l'UTF-8, mais il y a d'autres scénarios. Considérant que c'est VS, je voudrais simplement essayer de s'en tenir àW2A()
etA2W()
dans la plupart des cas cependant.TCHAR type est
char
ouwchar_t
, selon les paramètres de votre projet.Donc, si vous devez utiliser
std::string
au lieu destd::wstring
, vous devez utiliser un convertisseur de fonction. Je peut utiliserwcstombs
ouWideCharToMultiByte
.TCHAR est soit char ou wchar_t, donc un
est une façon de le faire.
L'autre est de passer
char
complètement et il suffit d'utiliserstd::wstring
.Ma réponse est tardive, je vous l'avoue, mais avec les réponses de "Alok Enregistrer" et quelques recherches j'ai trouvé un bon moyen! (Note: je n'ai pas tester cette version, beaucoup, de sorte qu'il peut ne pas fonctionner dans tous les cas, mais de ce que j'ai testé il devrait):
Simple!
Puis capturer le char * en std::string
std::string
à la place? Edit : Vous avez également la fuite d'une tonne de petits tampons avecsingleCharacter
. Cette solution n'est pas acceptable en l'état. Il n'est pas nécessaire d'allouer dynamiquement poursingleCharacter
et je ne vois pas la nécessité pourstrcat
pour écrire une chaîne de caractère par caractère.