Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2940 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  PB: Fonction de conversion Unicode->char

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PB: Fonction de conversion Unicode->char

n°1166572
Toby14
Toby or not Toby
Posté le 01-08-2005 à 12:04:51  profilanswer
 

Salut , j'ai fait une petite fonction de conversion des caractres unicode vers du char*.
Hors parfois il me sort n'importe quoi.
 
Voici un exemple de ce qu'il me sort:
laille: 11 ecris: @pð  
taille: 9 ecris: 127.0.0.1ont  
 
au lieu de  
taille: 11 ecris: /WaterWorld
taille: 9 ecris: 127.0.0.1
 
En fait je me sert de cela dans un jeu que je fait avec Irrlitch qui pour être un max portable utilise l'Unicode pour les guis.
Donc en gros on a dans Irrlitch des    "const wchar_t machin" que je veux transformer en "char* truc" pour faire mes connection socket et lancer une map.
 
voici le code:
 

Code :
  1. char* Menu :: wchar_t_to_char(const wchar_t* wc){
  2.   if(wc!=NULL){
  3.     int i;
  4.     char* lwc = (char*) malloc(wcslen(wc));
  5.     i = wcstombs(lwc, wc, wcslen(wc));
  6.     cout <<"taille: " <<wcslen(wc) << " ecris: " << lwc << endl;
  7.     return lwc;
  8.   }
  9.   return "error\0";     
  10. }


 
que j'appel comme cela:
 

Code :
  1. char* Menu::getMap(){
  2.   return (char*)wchar_t_to_char(current_map);
  3. }


et current_map c'est "const wchar_t* current_map = L"/WaterWorld" "
 
explication des foncions: wcstombs(char*, wchar_t*, int)
elle signifie wide chars to multibyte chars.
et wcslen(wchar_t*) renvoie un int et signifie wide chars length.
 
Voilaà si qq'un sait pourquoi ca merde. Merci.


Message édité par Toby14 le 01-08-2005 à 12:06:15
mood
Publicité
Posté le 01-08-2005 à 12:04:51  profilanswer
 

n°1167412
Toby14
Toby or not Toby
Posté le 01-08-2005 à 23:01:42  profilanswer
 

Personne ne sait?
Esce que ca viendrait pas du fait que je converti d'un const vers du pas const?

n°1169640
Bebebert
Posté le 04-08-2005 à 09:01:40  profilanswer
 

Depuis quand on utilise malloc en C++? Je l'utilise dans l'exemple pour que tu puisses l'utiliser
 
char* Menu :: wchar_t_to_char(const wchar_t* wc)
{
  if(wc!=NULL)
  {
    int i;
    char* lwc = malloc(wcslen(wc) + 1); // +1 pour le zéro
    while(*wc) *lwc++ = (char)*wc++;
    return lwc;
  }
  return "error"; // le 0 terminal est implicite....
}
 
C'est quand même bizarre d'allouer dans une fonction sans libérer dans celle-ci. T'aurais pas des petites fuites dans ton prog?

n°1169831
HelloWorld
Salut tout le monde!
Posté le 04-08-2005 à 13:58:18  profilanswer
 

Utilise des wstring/string.

Code :
  1. #include <iostream>
  2. #include <string>
  3. std::string to_string( const std::wstring & wstr )
  4. {
  5.     char * buffer = 0;
  6.     try
  7.     {
  8.         size_t buffer_size = wstr.size() + 1;
  9.         buffer = new char[ buffer_size ];
  10.         size_t nb = std::wcstombs( buffer, wstr.c_str(), buffer_size );
  11.         std::string result;
  12.         if ( nb == static_cast<size_t>( -1 ) )
  13.         {
  14.             result = "error";
  15.         }
  16.         else
  17.         {
  18.             result = buffer;
  19.         }
  20.         delete [] buffer;
  21.         return result;
  22.     }
  23.     catch ( ... )
  24.     {
  25.         delete [] buffer;
  26.         throw;
  27.     }
  28. }
  29. int main()
  30. {
  31.     std::cout << to_string( L"/WaterWorld" ) << '\n';
  32. }



---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1170907
Toby14
Toby or not Toby
Posté le 05-08-2005 à 17:43:24  profilanswer
 

Merci bien à vous deux.  
C'est vrai que pour l'allocation malloc il doit y avoir une petite fuite mais celle-ci est minime car appelé très peu souvent, mais ce n'est pas une raison je suis d'accord. Je vais voir ça.
Les wstring j'avais essayé mais j'avais une erreur qui m'a gonflé. J'incluais string et le compilo ne disais rien mais impossible après d'utiliser std::string et les wcout alors j'ai essayé autrement.

n°1185793
deulignes
nontidjiou !
Posté le 27-08-2005 à 08:14:13  profilanswer
 

tu peux aussi utiliser la fonction MFC WideCharToMultiByte et sous ATL la macro W2T


---------------
1000 tofs d'A380 : --> http://www.flickr.com/photos/tags/A380/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  PB: Fonction de conversion Unicode->char

 

Sujets relatifs
[vba] fonction split lecture fichierconnexion php<->mysql et performances en fonction des requetes
[javascript] appel de fonctionPb avec une fonction
error: invalid operands of types 'const char [15]' and 'short ..Exécuter une fonction toutes les x secondes
[fonction recursive]affichage de contenu d'un dossier en asciistring->const char* pas ok en mode debug
[SQL]fonction de comparaison de chaines[Résolu](j'espère)[JS] fonction de type isset
Plus de sujets relatifs à : PB: Fonction de conversion Unicode->char


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR