IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

_bstr_t en string


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Points : 47
    Points
    47
    Par défaut _bstr_t en string
    Bonjour à vous !

    Je cherche à convertir un _bstr_t en string pour pouvoir exploiter la chaine de caractère dans d'autres parties de mon projet. Pouvez-vous m'éclairer sur le procédé de conversion?

    Je vous remercie d'avance !

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    En principe c'est aussi simple que ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    _bstr_t bs;
    //remplir bs...
    char const *pstr = bs;
    std::string s(pstr);
    Ou alors tu peux chipoter avec WideCharToMultiByte.

    Ou encore tu adaptes ce code à tes besoins (conversion d'un wstring en string)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    std::string wcs2str(std::wstring const & ws)
    {
    	//a try for UTF16 conversion to ANSI (CP1252)
    	std::string s(ws.size(), ' ');
    	std::string::iterator it = s.begin();
    	for (wchar_t wc : ws)
    	{
    		switch (wc)
    		{
    		case 8364: *it = ''; break;
    		//case  129: ''
    		case 8218: *it = ''; break;
    		case  402: *it = 'ƒ'; break;
    		case 8222: *it = ''; break;
    		case 8230: *it = ''; break;
    		case 8224: *it = ''; break;
    		case 8225: *it = ''; break;
    		case  710: *it = 'ˆ'; break;
    		case 8240: *it = ''; break;
    		case  352: *it = 'Š'; break;
    		case 8249: *it = ''; break;
    		case  338: *it = 'Œ'; break;
    		//case  141: ''
    		case  381: *it = 'Ž'; break;
    		//case  143: ''
    		//case  144: ''
    		case 8216: *it = ''; break;
    		case 8217: *it = ''; break;
    		case 8220: *it = ''; break;
    		case 8221: *it = ''; break;
    		case 8226: *it = ''; break;
    		case 8211: *it = ''; break;
    		case 8212: *it = ''; break;
    		case  732: *it = '˜'; break;
    		case 8482: *it = ''; break;
    		case  353: *it = 'š'; break;
    		case 8250: *it = ''; break;
    		case  339: *it = 'œ'; break;
    		//case  157: ''
    		case  382: *it = 'ž'; break;
    		case  376: *it = 'Ÿ'; break;
    		default:
    			if (wc < 256)
    				*it = (unsigned char)wc;
    			else
    				*it = '?';//TODO check U+D800 to U+DFFF surrogate pairs
    		}
    		++it;
    	}
    	return s;
    }

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Et le summum du summum () est d'utiliser les fonctionnalités de <codecvt> après avoir converti le_bstr_t en std::wstring.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <codecvt>
     
    std::wstring ws = ...;
     
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> cvt;
    std::string s = cvt.to_bytes(ws);
    Mais là, il faut potasser la doc du standard car je connais pas trop...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Le premier code posté par camboui est censé marcher.
    Le second est... intéressant (et n'a pas l'air incorrect).

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Je vois que la question n'a pas encore été marquée comme résolue...

    J'ajoute donc un lien vers une question semblable à laquelle bacelar et Médinoc ont avantageusement répondu
    convertion-lpwstr-lpcstr/
    Et où je découvre les macros de conversion proposées par ATL

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 053
    Points
    33 053
    Billets dans le blog
    4
    Par défaut
    Dans un sujet identique
    http://www.developpez.net/forums/d16...s/#post8745660
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::wstring to_string(const std::string& s) { std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; return converter.from_bytes(s); }
    std::string to_string(const std::wstring& s) { std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; return converter.to_bytes(s); }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion _bstr_t en system::String^
    Par K3nJi dans le forum C++/CLI
    Réponses: 0
    Dernier message: 08/08/2008, 11h49
  2. éliminer un caractere d'un string
    Par no-vice dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2002, 14h55
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo