web-dev-qa-db-fra.com

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 en ce qui concerne le référencement de char et tchar.

18
CrashCodes
7
jeffm

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

  • CW2A
  • CA2W
  • etc...

MSDN

10
RichS

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

7
Chris Johnson

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) les if (), et si elles sont égales, suppriment tout ce qui est entre les accolades

3
James Curran

Il y a également quelques réponses dans ce post, surtout si vous recherchez une solution multiplate-forme:

UTF8 vers/depuis une conversion de caractères large en STL

3
Mark Ransom

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.

2
Dmitry Obukhov

Vous pouvez mettre la condition dans votre code

ifdef _UNICODE

{// AIME TCHAR IS LARGE CHAR} AUTRE {// AIME TCHAR IS CHAR}

1
chandan

Je réalise que c'est un vieux fil, mais il ne m'a pas donné la "bonne" réponse, donc 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

0
John