一、CString转String函数
CString是MFC(Microsoft Foundation Class)中提供的一种字符串类,而String是C++11标准中的字符串类。在两者之间进行转换是很常见的操作。可以使用CString::GetString函数将CString对象转换为char*类型,然后再将char*类型转换为string类型。
CString cstr = "Hello World!";
std::string str(cstr.GetString());
std::cout << str << std::endl;
在使用GetString函数时需要注意,如果CString对象被修改,那么返回的指针也会指向修改后的字符串,因此必须保证在使用指针之前CString对象不会被修改。
二、CString转char数组
使用ConvertUnicodeToMultiByte函数将CString对象转换为char数组。
CString cstr = "Hello World!";
char s[100];
WideCharToMultiByte(CP_ACP, NULL, cstr, -1, s, 100, NULL, NULL);
std::cout << s << std::endl;
其中WideCharToMultiByte是Windows API中将Unicode编码的字符转换为多字节字符集的函数。
三、CString转String utf8
使用CT2CA函数将CString对象转换为char*类型,然后再将char*类型转换为string类型,CT2CA 默认将CString转换为UTF-8字符串。
CString cstr = "Hello World!";
std::string utf8str(CT2CA(cstr));
std::cout << utf8str << std::endl;
四、CString转String出错
CString到string的转换可能会出现乱码,特别是在多字节字符集(如GBK)中常常出现这种情况。如果出现乱码,最好的解决办法是使用Unicode字符集。
如果一定要使用多字节字符集,可以先将CString转换为wchar_t数组,再将wchar_t数组转换为char数组,并指定正确的代码页。
CString cstr = "你好世界!";
wchar_t wsz[100];
wcscpy_s(wsz, cstr);
char s[100];
WideCharToMultiByte(CP_ACP, NULL, wsz, -1, s, 100, NULL, NULL);//这里的-1 是因为WideCharToMultiByte函数在 NULL字符时能够自己计算长度
std::cout << s << std::endl;
五、CString转String^
CString到String^可以使用marshal_as函数进行转换,需要包含头文件msclr/marshal_cppstd.h。
#include
CString cstr = "Hello World!";
String^ str = msclr::interop::marshal_as<String^>(CString(cstr));
Console::WriteLine(str);
六、CString转char
将CString对象转换为char类型可以使用(LPCTSTR)强制转换。
CString cstr = "H";
char c = (LPCTSTR)cstr;
std::cout << c << std::endl;
七、CString转double
将CString对象转换为double类型可以使用_tstof函数。
CString cstr = "3.1415926";
double pi = _tstof(cstr);
std::cout << pi << std::endl;
八、CString转换为String
使用CT2T函数将CString对象转换为CT2T<CString, strtype>类型,然后再通过ToString函数将其转换为String类型。
CString cstr = "Hello World!";
String^ str = gcnew String(CT2T<CString, strtype>(cstr).ToString());
Console::WriteLine(str);
九、CString转byte数组
使用wstring类型临时转换,然后使用reinterpret_cast强制转换为unsigned char*类型的指针即可。
CString cstr = "Hello World!";
std::wstring wstr = CT2W(cstr);
unsigned char* bytes = reinterpret_cast(wstr.c_str());
int len = wstr.size() * sizeof(wchar_t);
for (int i = 0; i < len; ++i)
{
std::cout << (int)bytes[i] << " ";
}
std::cout << std::endl;
总之,CString到String的转换虽然看起来很简单,但是却需要注意很多细节。希望本文能够帮助到需要进行CString到String转换的开发者。
原创文章,作者:RDEI,如若转载,请注明出处:https://www.506064.com/n/150014.html
微信扫一扫
支付宝扫一扫