最近、XCHAR*型のc++コードに出くわしました。このタイプとは何か、XCHAR*をstd::stringに変換するにはどうすればよいか疑問に思いました。
とても親切な人です。
ありがとう
最近、XCHAR*型のc++コードに出くわしました。このタイプとは何か、XCHAR*をstd::stringに変換するにはどうすればよいか疑問に思いました。
とても親切な人です。
ありがとう
UTF8 (文字「a」で示される)、UTF16 (文字「w」で示される)、および現在のビルドで使用されているもの (文字「t」で示される) の間で変換するヘッダー ファイルを使用しています。chris が 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);
}
これらのいくつかは変更可能な右辺値を返し、一部は const 左辺値を返しますが、これはほとんどのコードで考えられるほど問題ではないことに注意してください。