Come faccio a convertire un “puntatore const TCHAR” per un “std::string”?

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

  •  22-09-2019
  •  | 
  •  

Domanda

Ho una classe che restituisce un tipo puntatore a un "const TCHAR".Ho bisogno di convertire un std::string, ma non ho trovato un modo per rendere questo accada.

Qualcuno può fornire alcune informazioni su come convertire?

È stato utile?

Soluzione

A seconda delle impostazioni di compilazione, TCHAR o è un char o un WCHAR (o wchar_t).

Se si utilizza l'impostazione a più byte character stringa, allora il vostro TCHAR è la stessa di un char. Quindi, si può solo impostare la stringa al TCHAR* restituito.

Se si utilizza l'impostazione stringa di caratteri Unicode, allora il vostro TCHAR è una vasta char e deve essere convertito utilizzando WideCharToMultiByte .

Se si utilizza Visual Studio, che suppongo che voi siate, è possibile modificare questa impostazione nelle proprietà del progetto sotto set di caratteri.

Altri suggerimenti

Fare tutto Brian dice.Una volta che si ottiene la tabella codici di cui avete bisogno, allora si può fare:

std::string s(myTchar, myTchar+length);

o

std::wstring s(myTchar, myTchar+length);

per farlo in una stringa.

È inoltre possibile utilizzare i comodi macro di conversione di testo ATL per questo, per esempio:.

std::wstring str = CT2W(_T("A TCHAR string"));

CT2W = Testo Cost Per Wide.

È inoltre possibile specificare una pagina di codice per la conversione, per es.

std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE);

Queste macro (nella loro forma attuale) sono stati disponibili per Visual Studio C ++ progetti dal VS2005.

Dipende. Se non è stato definito _UNICODE o UNICODE allora si può fare una stringa contenente il carattere in questo modo:

const TCHAR example = _T('Q');
std::string mystring(1, example);

Se avete utilizza _UNICODE e UNICODE allora questo approccio può ancora funzionare, ma il personaggio potrebbe non essere convertibile ad un char. In questo caso sarà necessario convertire il carattere di una stringa. In genere è necessario utilizzare una chiamata come wcstombs o WideCharToMultiByte che vi dà il controllo più piena sopra la codifica.

In entrambi i casi è necessario allocare un buffer per il risultato e costruire il std::string da questo buffer, ricordandosi di rilasciare il buffer una volta il gioco è fatto (o usare qualcosa come vector<char> in modo che questo avviene automaticamente).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top