Wie kann ich einen „Zeiger auf const TCHAR“ zu einem „std :: string“ konvertieren?

StackOverflow https://stackoverflow.com/questions/2141848

  •  22-09-2019
  •  | 
  •  

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top