Std:string in std::wstring wandeln ?!?

Hallo,

mein Problem ist eigentlich bereits mit dem Titel beschrieben.
Ich habe einen string

string test = „blabla“;

Wie mache ich daraus einen wstring ???

wstring wTest = irgendwasMachenMit(test); ???

Casten geht nicht!

Kann jemand helfen?
Danke i.v.

Gruss,
ANDI

mein Problem ist eigentlich bereits mit dem Titel beschrieben.
Ich habe einen string

string test = „blabla“;

Wie mache ich daraus einen wstring ???

Siehe z.B. „Die C++ Programmiersprache“, Abschnitt 20.3.4:

string s = "foo";
wstring ws( s.begin(), s.end() );

Geht aber so nicht! -> error C2664

‚__cdecl std::basic_string,class std::allocator >::std::basic_string,class std::allocator >(const unsigned short *,unsigned int,const class std::allocator &amp:wink:‘ : cannot convert parameter 1 from ‚char *‘ to ‚const unsigned short *‘
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Geht aber so nicht! -> error C2664

Wie sieht der relevante Code bei dir aus? Dieses programm läuft bei mir wunderbar trotz pedantischer Compiler-Flags (g++ -Wall -pedantic):

#include 

using namespace std;

int main( void ) {
 string s( "foo" );
 wstring ws( s.begin(), s.end() );

 return 0;
}

MultiByteToWideChar
Hi Andi,

Mit casten geht da nichts, da ein WSTRING aus Integern besteht und ein String aus Bytes.
Es gibt noch folgende Möglichkeit. (VC7)

WCHAR* A2WStr (char *s)
{ static WCHAR wstr[200];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,s,(int)strlen(s),wstr,(int)strlen(s));
return wstr;
}

char* W2AStr (WCHAR *wstr)
{ static char s[200];
WideCharToMultiByte(CP_ACP,MB_PRECOMPOSED,wstr,-1,s,(int)strlen(s),NULL,NULL);
return s;
}

Gruß
husky

Mit casten geht da nichts, da ein WSTRING aus Integern besteht
und ein String aus Bytes.

Es geht hier nicht um das, was MS unter WSTRING versteht. WSTRING ist irgendein typedef oder define für ein simples Array aus 16bit-Integern, während std::wstring eine spezialisierung des basic_string-Templates auf einen entsprechenden Typ ist.

Vielen Dank! :smile:

Anstelle von CP_ACP habe ich CP_UTF8, und nun scheint alles zu funktionieren! :smile: