2012-09-10 94 views
0

我最近遇到了一塊C++代碼,它有一個類型XCHAR *。我想知道這是什麼類型,我如何將XCHAR *轉換爲std :: string。轉換xchar * std :: string

這將是非常善良的人來幫助。

感謝

+2

從'XCHAR'和'TCHAR'相同的位置尋找。因此,您需要一個'std :: string'或'std :: wstring',具體取決於它應該是哪個,構造函數應該採用它。 – chris

回答

1

我有一個頭文件我用的UTF8,UTF16(用字母表示「W」)(由字母「A」表示)之間的轉換,不管當前構建使用(記由字母「t」)。假設克里斯說,XCHAR相同TCHAR,這些功能應該很好地工作:

inline std::string wtoa(const std::wstring& Text){ 
    std::string s(WideCharToMultiByte(CP_UTF8, 0, Text.c_str(), Text.size(), NULL, NULL, NULL, NULL), '\0'); 
    s.resize(WideCharToMultiByte(CP_UTF8, 0, Text.c_str(), Text.size(), &s[0], s.size(), NULL, NULL)); 
    return s; 
} 
inline std::wstring atow(const std::string& Text) { 
    std::wstring s(MultiByteToWideChar(CP_UTF8, 0, Text.c_str(), Text.size(), NULL, NULL), '\0'); 
    s.resize(MultiByteToWideChar(CP_UTF8, 0, Text.c_str(), Text.size(), &s[0], s.size())); 
    return s; 
} 
#ifdef _UNICODE 
inline std::string ttoa(const std::wstring& Text) {return wtoa(Text);} 
inline std::wstring atot(const std::string& Text) {return atow(Text);} 
inline const std::wstring& ttow(const std::wstring& Text) {return Text;} 
inline const std::wstring& wtot(const std::wstring& Text) {return Text;} 
typedef std::wstring tstring; 
typedef std::wstringstream tstringstream; 
#else  
inline const std::string& ttoa(const std::string& Text) {return Text;} 
inline const std::string& atot(const std::string& Text) {return Text;} 
inline std::wstring ttow(const std::string& Text) {return atow(Text);} 
inline std::string wtot(const std::wstring& Text) {return wtoa(Text);} 
typedef std::string tstring; 
typedef std::stringstream tstringstream; 
#endif 

用法:

int main() { 
    XCHAR* str = ///whatever 
    std::string utf8 = ttoa(str); 
    std::wstring utf16 = ttow(str); 
} 

記住其中的一些返回一個可變的右值,有的一常量左值,但這比在大多數代碼中想象的要少。