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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    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
    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 �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    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 �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Le premier code post� par camboui est cens� marcher.
    Le second est... int�ressant (et n'a pas l'air incorrect).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    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 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    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); }
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

+ 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