wstring umwandeln
-
Hey,
ich würde gerne einen wstring in string umwandeln.
Wie geht das?
-
-
da wird aber in *wchar umgewandelt und ich muss in *char
-
knechtruprecht schrieb:
da wird aber in *wchar umgewandelt und ich muss in *char
Oh, zu schnell gelesen. Wie stellst du dir das Verhalten vor, wenn in deinem wchar Zeichen sind, die es in char nicht gibt?
-
Das Umwandeln geht z.Bsp. so
std::string wstring2string( const std::wstring& src, std::locale loc) { size_t size = src.size(); char* Narrow = new char[size+1]; std::use_facet<std::ctype<wchar_t> > (loc).narrow(src.c_str(), src.c_str() + size, ' ', Narrow); Narrow[size] = '\0'; std::string res(Narrow); delete[] Narrow; return res; }Falls das Zeichen nicht umwandelbar ist wird hier ein Leerzeichen eingesetzt.
-
super danke

dann hab ich noch ein ähnliches Problem mit chars.
Also ich hab nen TCHAR bei dem muss ich hinten ein ANSI string anhängen.TCHAR Path[MAX_PATH];und da hab ich jetzt ein Array aus char die ich in dieses TCHAR array packen muss.
Natürlich könnte ich erstmal das char array in wchar_t umwandeln, aber dann geht es ja wieder nicht wenn ich mit multi byte compiliere. Hoffe ihr versteht mich. Hilft mir da vielleicht sprintf?
-
Braunstein schrieb:
Das Umwandeln geht z.Bsp. so
std::string wstring2string( const std::wstring& src, std::locale loc) { size_t size = src.size(); char* Narrow = new char[size+1]; std::use_facet<std::ctype<wchar_t> > (loc).narrow(src.c_str(), src.c_str() + size, ' ', Narrow); Narrow[size] = '\0'; std::string res(Narrow); delete[] Narrow; return res; }Falls das Zeichen nicht umwandelbar ist wird hier ein Leerzeichen eingesetzt.
New und delete, komm mir vor wie vor 15 Jahren
-
Man kann statt dem new/delete hier natürlich auch vector<char> oder ähnliches nehmen. Da wird dann intern aber auch nichts anderes gemacht.
-
delete wird intern über den Destruktor gemacht, was sicherer ist.
-
Wenn der wstring nur ASCII-Zeichen enthält:
std::wstring wide(L"Hallo Leute !"); std::string narrow(wide.begin(), wide.end());