Quel est le moyen le plus simple de convertir char en / depuis tchar en C / C ++ (ms)?

Cela semble être une jolie question de softball, mais j’ai toujours du mal à regarder cette fonction parce qu’il semble y avoir beaucoup de variations concernant le référencement de char et tchar.

MultiByteToWideChar mais voyez également “Quelques-uns des pièges de MultiByteToWideChar” .

Le moyen le plus simple consiste à utiliser les macros de conversion:

  • CW2A
  • CA2W
  • etc…

MSDN

TCHAR est un typedef spécifique à Microsoft pour char ou wchar_t (un caractère large).

La conversion en caractère dépend de la nature de ces éléments. 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 larges en LIST

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 l’est pas. que je dois vérifier en quelque sorte.

if (sizeof(TCHAR) != sizeof(wchar_t)) { .... } 

La chose intéressante à propos de cela est que les deux tailles des égaux sont des constantes, ce qui signifie que le compilateur gérera (et supprimera) le if (), et si elles sont égales, suppriment tout ce qui est entre les accolades.

Voici le code CPP qui duplique _TCHAR * argv [] en char * argn [].

http://www.wincli.com/?p=72

Si vous adoptez l’ancien code sous Windows, l’utilisation simple est définie comme facultative dans le code.

Vous pouvez mettre la condition dans votre code

ifdef _UNICODE

{// AIMEZ TCHAR IS WIDE CHAR}} SAUF {// AIMEZ TCHAR IS CHAR}

Je réalise que c’est un vieux fil, mais cela ne m’a pas donné la “bonne” réponse, donc je l’ajoute maintenant.

La façon dont cela semble être fait maintenant consiste à utiliser la macro TEXT. L’exemple de FindFirstFile à msdn le montre bien. http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx