2010-01-26 76 views
4

我有一個類,它返回一個類型指針「const TCHAR」。我需要將它轉換爲std :: string,但我還沒有找到一種方法來實現這一點。如何將「指向常量TCHAR的指針」轉換爲「std :: string」?

任何人都可以提供一些見解如何轉換它?

+0

用返回的TCHAR作爲初始值創建一個新的std :: string:TCHAR xyz = fun();字符串轉換形式(xyz); ? – Leonidas 2010-01-26 19:08:06

回答

10

根據您的編譯設置,TCHAR可能是charWCHAR(或wchar_t)。

如果您使用的是多字節字符串設置,那麼您的TCHAR與char相同。所以你可以將你的字符串設置爲返回的TCHAR*

如果您使用的是Unicode字符串設置,那麼您的TCHAR是一個寬字符,需要使用WideCharToMultiByte進行轉換。

如果您使用Visual Studio,我假設您是您可以在字符集下的項目屬性中更改此設置。

+0

這是我做的: #if!defined(UNICODE)|| !(_UNICODE) const std :: string k_Var(reinterpret_cast (Var2.ReturnsAConstTCHAR())); #endif – TERACytE 2010-01-26 22:19:31

+0

糟糕。這應該是「static_cast」而不是「reinterpret_cast」。 – TERACytE 2010-01-26 22:32:47

1

這取決於。如果你還沒有定義_UNICODEUNICODE那麼你可以讓包含這樣的字符的字符串:

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

如果您正在使用_UNICODEUNICODE那麼這種方法可能仍然工作,但性格可能不是對可轉換一個char。在這種情況下,您需要將字符轉換爲字符串。通常情況下,您需要使用像wcstombsWideCharToMultiByte這樣的呼叫,這樣可以更全面地控制編碼。無論採用哪種方式,您都需要爲結果分配一個緩衝區,並從此緩衝區構建std::string,記住一旦完成後釋放緩衝區(或使用類似vector<char>這樣會自動發生)。

3

一切都是Brian說的。一旦你在你需要的代碼頁得到它,那麼你可以做:

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

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

得到它爲一個字符串。

3

您也可以使用方便的ATL文本轉換宏爲此,例如:

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

CT2W =常數文本要寬。

您還可以爲轉換指定一個代碼頁,例如,

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

自VS2005以來,這些宏(以其當前形式)可用於Visual Studio C++項目。

相關問題