0
我最近遇到了一塊C++代碼,它有一個類型XCHAR *。我想知道這是什麼類型,我如何將XCHAR *轉換爲std :: string。轉換xchar * std :: string
這將是非常善良的人來幫助。
感謝
我最近遇到了一塊C++代碼,它有一個類型XCHAR *。我想知道這是什麼類型,我如何將XCHAR *轉換爲std :: string。轉換xchar * std :: string
這將是非常善良的人來幫助。
感謝
我有一個頭文件我用的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);
}
記住其中的一些返回一個可變的右值,有的一常量左值,但這比在大多數代碼中想象的要少。
從'XCHAR'和'TCHAR'相同的位置尋找。因此,您需要一個'std :: string'或'std :: wstring',具體取決於它應該是哪個,構造函數應該採用它。 – chris