Wie kann ich einen „Zeiger auf const TCHAR“ zu einem „std :: string“ konvertieren?
Frage
Ich habe eine Klasse, die einen typisierten Zeiger auf eine „const TCHAR“ zurückgibt. Ich muß es einen std :: string konvertieren, aber ich habe festgestellt, keinen Weg, dies zu verwirklichen.
Kann jemand einen Einblick darüber, wie es zu konvertieren?
Lösung
Je nach Zusammenstellung Einstellungen TCHAR
ist entweder ein char
oder ein WCHAR
(oder wchar_t
).
Wenn Sie die Multi-Byte-Zeichenfolge Einstellung verwenden, dann ist Ihr TCHAR
das gleiche wie ein Zeichen. So können Sie Ihre Zeichenfolge an den TCHAR*
zurück gesetzt gerade.
Wenn Sie die Unicode-Zeichenfolge Einstellung verwenden, dann ist Sie TCHAR
ein breites Zeichen und Bedürfnisse zu konvertierenden mit WideCharToMultiByte .
Wenn Sie Visual Studio verwenden, die ich nehme an, Sie sind, können Sie diese Einstellung in den Eigenschaften unter Zeichensatz-Projekt ändern.
Andere Tipps
Do alles Brian sagt. Sobald Sie es in der Codepage, die Sie brauchen, dann können Sie tun:
std::string s(myTchar, myTchar+length);
oder
std::wstring s(myTchar, myTchar+length);
es in einen String zu erhalten.
Sie können auch die handliche ATL-Text-Konvertierung Makros für diese, z.
std::wstring str = CT2W(_T("A TCHAR string"));
CT2W = Konst Text To Weit.
Sie können auch eine Codepage für die Konvertierung angeben, z.
std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE);
Diese Makros (in ihrer jetzigen Form) haben zur Verfügung zu Visual Studio C ++ Projekte seit VS2005.
Es hängt davon ab. Wenn Sie nicht _UNICODE
oder UNICODE
definiert haben, dann können Sie einen String machen den Charakter wie diese enthalten:
const TCHAR example = _T('Q');
std::string mystring(1, example);
Wenn Sie verwenden _UNICODE
und UNICODE
dann kann dieser Ansatz noch funktionieren, aber der Charakter kann nicht auf eine char
konvertierbar sein. In diesem Fall müssen Sie die Zeichen in eine Zeichenfolge konvertieren. Normalerweise benötigen Sie einen Anruf wie wcstombs
oder WideCharToMultiByte
verwenden, die Sie voller Kontrolle über die Codierung gibt.
In beiden Fällen müssen Sie einen Puffer für das Ergebnis zuzuweisen und die std::string
aus diesem Puffer zu konstruieren, die Erinnerung an die Puffer freizugeben, wenn Sie (oder verwenden Sie so etwas wie vector<char>
so, dass dies geschieht automatisch) fertig sind.