How do you convert CString and std::string std::wstring to each other?(你如何将 CString 和 std::string std::wstring 相互转换?)
问题描述
CString 非常方便,而 std::string 更兼容 STL 容器.我正在使用 hash_map.但是, hash_map 不支持 CString 作为键,所以我想将 CString 转换为 std::string代码>.
CString is quite handy, while std::string is more compatible with STL container. I am using hash_map. However, hash_map does not support CStrings as keys, so I want to convert the CString into a std::string.
编写 CString 哈希函数似乎需要很多时间.
Writing a CString hash function seems to take a lot of time.
CString -----> std::string
我该怎么做?
std::string -----> CString:
inline CString toCString(std::string const& str)
{
return CString(str.c_str());
}
我说的对吗?
这里有更多问题:
如何从 wstring 转换为 CString 以及反之亦然?
How can I convert from wstring to CString and vice versa?
// wstring -> CString
std::wstring src;
CString result(src.c_str());
// CString -> wstring
CString src;
std::wstring des(src.GetString());
这有什么问题吗?
另外,如何从 std::wstring 转换为 std::string 以及反之亦然?
Additionally, how can I convert from std::wstring to std::string and vice versa?
推荐答案
根据CodeGuru:
CString 到 std::string:
CString cs("Hello");
std::string s((LPCTSTR)cs);
BUT: std::string 不能总是从 LPCTSTR 构造.即,UNICODE 构建的代码将失败.
BUT: std::string cannot always construct from a LPCTSTR. i.e. the code will fail for UNICODE builds.
由于 std::string 只能从 LPSTR/LPCSTR 构造,使用 VC++ 7.x 或更高版本的程序员可以利用转换CT2CA 等类作为中介.
As std::string can construct only from LPSTR / LPCSTR, a programmer who uses VC++ 7.x or better can utilize conversion classes such as CT2CA as an intermediary.
CString cs ("Hello");
// Convert a TCHAR string to a LPCSTR
CT2CA pszConvertedAnsiString (cs);
// construct a std::string using the LPCSTR input
std::string strStd (pszConvertedAnsiString);
std::string 到 CString:(来自 Visual Studio 的 CString 常见问题解答...)
std::string s("Hello");
CString cs(s.c_str());
CStringT 可以从字符或宽字符串构造.即它可以从char*(即LPSTR)或wchar_t*(LPWSTR)转换.
CStringT can construct from both character or wide-character strings. i.e. It can convert from char* (i.e. LPSTR) or from wchar_t* (LPWSTR).
换句话说,char-specialization (of CStringT) ie CStringA, wchar_t-specilization CStringW,和 TCHAR-specialization CString 可以从 char 或宽字符构造,空终止(空终止在这里非常重要) 字符串来源.
Althoug IInspectable 修改了null-termination"部分 在评论中:
In other words, char-specialization (of CStringT) i.e. CStringA, wchar_t-specilization CStringW, and TCHAR-specialization CString can be constructed from either char or wide-character, null terminated (null-termination is very important here) string sources.
Althoug IInspectable amends the "null-termination" part in the comments:
不需要 NUL 终止.CStringT 具有采用显式长度参数的转换构造函数.这也意味着您可以使用嵌入 NUL 字符的 std::string 对象构造 CStringT 对象.
NUL-termination is not required.
CStringThas conversion constructors that take an explicit length argument. This also means that you can constructCStringTobjects fromstd::stringobjects with embeddedNULcharacters.
这篇关于你如何将 CString 和 std::string std::wstring 相互转换?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:你如何将 CString 和 std::string std::wstring 相互转换?
基础教程推荐
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 常量变量在标题中不起作用 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
