[C++] Conversion char * vers wchar_t *

Conversion char * vers wchar_t * [C++] - C++ - Programmation

Marsh Posté le 29-10-2004 à 15:17:13    

Bonjour,
J'essaie de faire un programme en c++ avec Visual Studio 6 qui permet de convertir un char * en wchar *.
Voici le code :

Code :
  1. #include <string>
  2. #include <iostream>
  3. void wsubstring(wchar_t *dest, const wchar_t *src, const int from, const int length)
  4. {
  5.       int i;
  6.       for (i=0; i<length; i++)
  7.          dest[i] = src[i+from];
  8.       dest[i] = '\0';
  9. }
  10.  
  11. void charToWchar(char *in, wchar_t *out)
  12. {
  13.    std::use_facet< std::ctype<wchar_t> >(std::locale()).widen(in,in+strlen(in),out);
  14.    wsubstring(out, out, 0, strlen(in));
  15. }
  16. int main(void)
  17. {
  18.    char in[255] =  "coucou ca vas";
  19.    wchar_t out[255];
  20.    charToWchar(in, out);
  21.    std::wcout << out << "\n";
  22.    return 0;
  23. }


Seulement, j'obtient 2 erreurs pour la ligne 13 quand je compile :

Code :
  1. error C2780: 'const _F &__cdecl std::use_facet(const class std::locale &,const _F *,bool)' : expects 3 arguments - 1 provided
  2. error C2228: left of '.widen' must have class/struct/union type


Je n'arrive pas à trouver la cause de ces erreurs. Merci pour votre aide.


Message édité par hugo25 le 29-10-2004 à 15:30:41
Reply

Marsh Posté le 29-10-2004 à 15:17:13   

Reply

Marsh Posté le 29-10-2004 à 15:42:20    

@_@
 
ben la première erreur, tu files qu'un argument à std::use_facet< std::ctype<wchar_t> >, donc il gueule (il en veut 3) et il ne construit pas ton objet
et la 2e, comme l'objet n'est pas construit tu fais un .widen dans le vide, donc il gueule aussi [:spamafote]
 
Accessoirement, différentes fonctions de conversion existent déjà [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2004 à 15:45:49    

Je n'ai pas trouvé de fonction de conversion.  
Masklinn, si tu en connait une, dit moi ou je peux la trouver. Merci. :)

Reply

Marsh Posté le 29-10-2004 à 15:58:20    

dans la MSDN


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2004 à 15:58:58    

Reply

Marsh Posté le 29-10-2004 à 16:01:58    

ben voilà, t'as plus qu'à trouver celle qui fait l'opération inverse et à encapsuler le tout histoire de gérer la mémoire et les erreurs proprement [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2004 à 16:05:42    

C'est pas très portable hélas les facets. Le plus simple (et le plus courant), c'est d'utiliser la macro _USE(loc, fac), et d'utiliser codecvt ensuite.
 
C'est décrit là je crois:
http://www.codeguru.com/Cpp/Cpp/cp [...] .php/c849/
 
Sinon, en MFC, il y a les classiques A2CT et compagnie qui sont rapides, puissants, efficaces.
 
Et sous unix, il y a la librairie iconv pour convertir tout en tout (parce que malheureusement, ça ne suffit pas de mettre ou d'enlever des 0 dans les wchar).

Reply

Marsh Posté le 29-10-2004 à 16:09:19    

Argh, viens de relire mon code, et en fait il y a la fonction classique Win32 qui fait ça: WideCharToMultiByte. Mais quel bordel à utiliser...
 
http://msdn.microsoft.com/library/ [...] e_2bj9.asp

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed