wstring in char* konvertieren



  • Hallo ,

    weiß vielleicht jemand wie man std::wstring in char* konvertieren kann ?

    Danke.

    Mfg Elke



  • Mit Bordmitteln würden mir nur Locales (genauer: die Facette codecvt<>) einfallen - aber ich hab' keine Ahnung, ob die wirklich passt.

    Jenseits des Standards kenne ich noch die MFC-Stringumwandlungs-Makros (W2A() und Konsorten).



  • Falls es immernoch um Xerces-C++ geht:

    #include <xercesc/util/XMLString.hpp>
    
    /* ... */
    char *c_string = XMLString::transcode( wide_string.c_str() );
    /* mach was mit c_string */
    XMLString::release(c_string);
    


  • Könnte man nicht narrow nehmen?
    Etwa so?

    wstring wtext = L"Das ist ein Text";
    size_t size = wtext.size();
    char *Narrow = new char[size+1];
    locale loc;
    char def = ' ';
    use_facet<ctype<wchar_t> > (loc).narrow(wtext.c_str(), wtext.c_str()+size, def, Narrow);
    Narrow[size] = '\0';
    


  • Hallo LordJaxom ,

    nein , es handelt sichj nicht mehr um den XML-String . Ich habe schon geparst und bin jetzt weiter .

    Aber ich kann ja versuchen den wstring in wchar_t* und dann wchar* in char*
    konvertieren.

    Kannst du mir da vielleicht helfen ?

    Danke.

    Mfg Elke



  • Hallo Braunstein,

    diese Methode ist bestimmt eine MFC-Methode .? Oder ?

    use_facet<ctype<wchar_t> > (loc).narrow(wtext.c_str(), wtext.c_str()+size, def, Narrow);
    

    DAs Problem ist, unsere Anwendungen laufen bei uns auf 2 Plattformen(Windoes und Unix ). 😞

    Danke.

    Mfg , Elke



  • Hallo

    nein das läuft auf meinen Borland Builder in reiner C++Standard-Konsole auch.

    bis bald
    akari



  • Um akaris Aussage nochmals zu untermauern. Das das reines Standard-C++.
    Allerdings funktioniert das bei mir auch nur mit meinem BCB6 aber nicht mit MinGW32 (abnormal program termination).



  • So , jetzt kann ich denn wstring in wchar_t* konvertieren.

    wchar_t* oMitteilung ;
    std::wstring wMittelung = L"D";
    
    oMitteilung = wMittelung .data();
    

    Jetzt muss ich nuc´r noch den wchar_t* in char* konvertieren .
    Wäre toll , wenn mir jemand helfen könnte .

    Mfg , Elke



  • Hallo

    aber genau das hat doch Braunstein gepostet... zwar von wstring auf char*, aber das prinzip ist das selbe.

    bis bald
    akari



  • Hallo Akari,

    du hast recht , aber ich wollte es nur einfacher haben.

    Jetzt konnte ich auch den wchar* in char* konvertieren :

    std::wstring x = L"D";
    wchar_t* woMitteilung; 
    
    woMitteilung = ( wchar_t* )x.data(); // gibt den wchar_t
    swcstombs( oMitteilung , ( const wchar_t* )woMitteilung , 2 );
    

    2 ist die Länge -habe hart reingestellt zum Testen.

    Vielen Dank für eure Unterstützung.

    Mfg ,
    Elke


Anmelden zum Antworten