wchar_t zu String
-
Hey Leute,
ich habe ein Problem und zwar, ich hab nicht so sehr viel Ahnung und Erfahrung beim casten da ich erstens noch nicht so sehr lang Programmier und zweitens bei meinen kleinen Programmen noch nie so richtig gezwungen war zu casten. Nun muss ich aber wchar_t in einen String umwandeln.
ich hab schon hier im Forum was gesucht und gefunden. Da stand was von swprintf(); und auch von snprintf(); .
Ich hab das auch damit schon bissl versucht doch leider bekomm ichs einfach net hin. Hab auch schon nach den referencen für beide funktionen geschaut aber leider nichts rausbekommen. Könnt ihr mir da vlt. irgendwie helfen ?Lg Sc0rpe

-
Wieso nimmst du keinen
wstring?
-
auch schon versucht aber erstens hab ich den noch nie benutzt, zweitens weiß ich da auch nicht so genau wie.
was ist den eigentlich der unterschied zwischen wstring und string ?
-
wstring ist eine Kette von wchar_t und string ist eine Kette von char

-
hm...okay klingt ja schon irgendwie logisch
,
könntest du mal ein beispiel schreiben.
Ich habs vorhin glaub so oder so ähnlich gesehen aber hat net funktioniertwchar_t alt[100]="safagsagagaha"; wstring neu(alt);kanns jetzt aber auch falsch haben :D, habs wieder verdrängt weils net funktioniert hat ^^
-
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 ....