wchar_t zu String



  • Sc0rpe schrieb:

    was ist den eigentlich der unterschied zwischen wstring und string ?

    string benutzt intern char. wstring benutzt intern wchar_t.

    wchar_t wc = L'w';
    wstring wstr; // Du musst <string> inkludieren.
    wstr += wc;
    


  • wchar_t alt[100] = L"safagsagagaha";
    wstring neu(alt);
    


  • okay soweit so gut,
    nun hab ich aber das Problem das ich den String noch verändern muss, also der string soll ein dateipfad sein.

    wstring Name;
    					Name+=name;
    					Name="c:/Project/"+Name+".txt";
    					ofstream datei;
    					datei.open(Name.c_str(),ios_base::out);
    					datei.close();
    

    leider bleibt das ganze hier hängen:

    Name="c:/Project/"+Name+".txt";
    

    wie kann ich das jetzt mit wstring machen oder kann ich jetzt den wstring in einen normalen string casten?



  • Irgendwo hackts dann doch. Wieso nimmst du dann nicht gleich std::string ?



  • out schrieb:

    Irgendwo hackts dann doch. Wieso nimmst du dann nicht gleich std::string ?

    weil ich dazu gezwungen bin den wchar_t zu verwenden , damit kann ich jedoch nicht weiterarbeiten. ich würde ja auch gern ein string nehmen aber da es anscheindend nicht so einfach ist wchar_t in string umzuwandeln und mir gesgagt wurde dann den wstring zu nehmen....
    mein ziel ist es ja auch am ende den string zu haben 😕



  • Erstens wäre es immer gut, wenn du die Fehlermeldungen angibst, damit man sieht, woran es hakt. Bei dir hängts jetzt wahrscheinlich daran, dass du ein L vor die Zeichenketten schreiben musst, damit sie als wchar_t- und nicht als char-Zeichenketten interpretiert werden.

    Zum Konvertieren gibts was im neuen Standard: http://en.cppreference.com/w/cpp/locale/wstring_convert



  • David_pb schrieb:

    Hier wurde mal ein wunderbarer Codeschnippsel gepostet:

    /* string2wstring.h */
     #pragma once
    
     #include <string>
     #include <vector>
     #include <locale>
     #include <functional>
     #include <iostream>
    
     // Put this class in your personal toolbox...
     template<class E,
     class T = std::char_traits<E>,
     class A = std::allocator<E> >
    
     class Widen : public std::unary_function<
         const std::string&, std::basic_string<E, T, A> >
     {
         std::locale loc_;
         const std::ctype<E>* pCType_;
    
         // No copy-constructor, no assignment operator...
         Widen(const Widen&);
         Widen& operator= (const Widen&);
    
     public:
         // Constructor...
         Widen(const std::locale& loc = std::locale()) : loc_(loc)
         {
     #if defined(_MSC_VER) && (_MSC_VER < 1300) // VC++ 6.0...
             using namespace std;
             pCType_ = &_USE(loc, ctype<E> );
     #else
             pCType_ = &std::use_facet<std::ctype<E> >(loc);
     #endif
         }
    
         // Conversion...
         std::basic_string<E, T, A> operator() (const std::string& str) const
         {
             typename std::basic_string<E, T, A>::size_type srcLen =
                 str.length();
             const char* pSrcBeg = str.c_str();
             std::vector<E> tmp(srcLen);
    
             pCType_->widen(pSrcBeg, pSrcBeg + srcLen, &tmp[0]);
             return std::basic_string<E, T, A>(&tmp[0], srcLen);
         }
     };
    
     // How to use it...
     int main()
     {
     Widen<wchar_t> to_wstring;
     std::string s = "my test string";
     std::wstring w = to_wstring(s);
     std::wcout << w << L"\n";
     }
    

    grüße



  • Ups, sorry, vergiß den Code. Das ist natürlich die falsche Richtung. 🙄



  • Wie ist es hiermit?

    wstring wstr(L"xyz");
    string s;
    s.assign(wstr.begin(), wstr.end());
    


  • out schrieb:

    Wie ist es hiermit?

    wstring wstr(L"xyz");
    string s;
    s.assign(wstr.begin(), wstr.end());
    

    das hab ich auch schon gefunden dazu wurde aber gesagt es sei unportabel und sollte deshalb nicht genutzt werden 😕
    ...da ich aber bisher auch keine andere Funktionierende lösung gefunden habe hab ich es übergangshabler erstmal so gemacht ....


Anmelden zum Antworten