Quel est le moyen le plus simple de convertir char [] en / depuis tchar [] en C / C ++ (ms)?
Question
Cela semble être une jolie question de softball, mais j’ai toujours du mal à examiner cette fonction car il semble y avoir de nombreuses variations en ce qui concerne le référencement de char et tchar.
La solution
MultiByteToWideChar mais aussi voir " Quelques-uns des pièges de MultiByteToWideChar " .
Autres conseils
TCHAR est une typedef spécifique à Microsoft pour char ou wchar_t (un caractère large).
La conversion en caractère dépend de celui-ci. Si TCHAR est en fait un caractère, alors vous pouvez faire un casting simple, mais s'il s'agit vraiment d'un wchar_t, vous aurez besoin d'une routine pour convertir entre les jeux de caractères. Voir la fonction MultiByteToWideChar ()
Il y a également quelques réponses dans ce post, surtout si vous recherchez une solution multiplate-forme:
Conversion UTF8 vers / depuis caractères étendus en format STL
Bien que dans cette situation particulière, je pense que le personnage de TChar est un personnage étendu, je n'aurai besoin de convertir que s'il ne le fait pas. que je dois vérifier en quelque sorte.
if (sizeof(TCHAR) != sizeof(wchar_t))
{ .... }
La chose intéressante à ce sujet est que les deux tailles d’égal à égal sont des constantes, ce qui signifie que le compilateur gérera (et supprimera) le if (), et si elles sont égales, suppriment tout ce qui se trouve entre les accolades
Voici le code CPP qui duplique _TCHAR * argv [] en char * argn [].
Si vous adoptez l'ancien code sous Windows, il suffit de définir les options mentionnées dans le code comme facultatives.
Vous pouvez mettre une condition dans votre code
ifdef _UNICODE
{// AIMEZ TCHAR IS WIDE CHAR}} SAUF {// AIMEZ TCHAR IS CHAR}
Je me rends compte que c’est un vieux fil, mais il ne m’a pas obtenu le "droit". répondez, alors l'ajoute maintenant.
Pour ce faire, utilisez la macro TEXT. L'exemple de FindFirstFile à msdn le montre bien. http://msdn.microsoft .com / fr-fr / bibliothèque / windows / desktop / aa364418% 28v = vs.85% 29.aspx