作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近遇到了一段类型为 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);
}
请记住,其中一些返回可变右值,一些返回常量左值,但这在大多数代码中并没有您想象的那么严重。
关于c++ - 转换 xchar* std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12358760/
我最近遇到了一段类型为 XCHAR* 的 C++ 代码。我想知道这种类型是什么以及如何将 XCHAR* 转换为 std::string。 如果有人愿意提供帮助,那将是非常友善的。 谢谢 最佳答案 我有
我是一名优秀的程序员,十分优秀!