在C++中经常涉及字符串类型转换,VC++里面尤其严重,实在搞不通微软为什么要搞这么多的字符串类型,实在是纠结,这里做一个简单的小总结:
从 char * 转换
示例
说明
此示例演示如何从 char * 转换为上面列出的其他字符串类型。
// convert_from_char.cpp// compile with /clr /link comsuppw.lib #include<iostream>#include<stdlib.h>#include<string> #include"atlbase.h"#include"atlstr.h"#include"comutil.h" usingnamespace std;usingnamespaceSystem; int main(){char*orig ="Hello, World!"; cout << orig <<" (char *)"<< endl; // Convert to a wchar_t*size_t origsize = strlen(orig)+1;constsize_t newsize =100;size_t convertedChars =0;wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; // Convert to a _bstr_t_bstr_t bstrt(orig); bstrt +=" (_bstr_t)"; cout << bstrt << endl; // Convert to a CComBSTRCComBSTR ccombstr(orig);if(ccombstr.Append(L" (CComBSTR)")== S_OK){ CW2A printstr(ccombstr); cout << printstr << endl;} // Convert to a CStringCString cstring(orig); cstring +=" (CString)"; cout << cstring << endl; // Convert to a basic_stringstring basicstring(orig); basicstring +=" (basic_string)"; cout << basicstring << endl; // Convert to a System::StringString^systemstring = gcnew String(orig); systemstring +=" (System::String)";Console::WriteLine("{0}", systemstring);delete systemstring;}输出
Hello,World!(char*)Hello,World!(wchar_t*)Hello,World!(_bstr_t)Hello,World!(CComBSTR)Hello,World!(CString)Hello,World!(basic_string)Hello,World!(System::String)从 wchar_t * 转换
示例
说明
此示例演示如何从 wchar_t * 转换为上面列出的其他字符串类型。
// convert_from_wchar_t.cpp// compile with /clr /link comsuppw.lib #include<iostream>#include<stdlib.h>#include<string> #include"atlbase.h"#include"atlstr.h"#include"comutil.h" usingnamespace std;usingnamespaceSystem; int main(){wchar_t*orig = L"Hello, World!"; wcout << orig << L" (wchar_t *)"<< endl; // Convert to a char*size_t origsize = wcslen(orig)+1;constsize_t newsize =100;size_t convertedChars =0;char nstring[newsize]; wcstombs_s(&convertedChars, nstring, origsize, orig, _TRUNCATE); strcat_s(nstring," (char *)"); cout << nstring << endl; // Convert to a _bstr_t_bstr_t bstrt(orig); bstrt +=" (_bstr_t)"; cout << bstrt << endl; // Convert to a CComBSTRCComBSTR ccombstr(orig);if(ccombstr.Append(L" (CComBSTR)")== S_OK){ CW2A printstr(ccombstr); cout << printstr << endl;} // Convert to a CStringCString cstring(orig); cstring +=" (CString)"; cout << cstring << endl; // Convert to a basic_string wstring basicstring(orig); basicstring += L" (basic_string)"; wcout << basicstring << endl; // Convert to a System::StringString^systemstring = gcnew String(orig); systemstring +=" (System::String)";Console::WriteLine("{0}", systemstring);delete systemstring;}输出
Hello,World!(wchar_t*)Hello,World!(char*)Hello,World!(_bstr_t)Hello,World!(CComBSTR)Hello,World!(CString)Hello,World!(basic_string)Hello,World!(System::String)从 _bstr_t 转换
示例
说明
此示例演示如何从 _bstr_t 转换为上面列出的其他字符串类型。
// convert_from_bstr_t.cpp// compile with /clr /link comsuppw.lib #include<iostream>#include<stdlib.h>#include<string> #include"atlbase.h"#include"atlstr.h"#include"comutil.h" usingnamespace std;usingnamespaceSystem; int main(){_bstr_t orig("Hello, World!"); wcout << orig <<" (_bstr_t)"<< endl; // Convert to a char*constsize_t newsize =100;char nstring[newsize]; strcpy_s(nstring,(char*)orig); strcat_s(nstring," (char *)"); cout << nstring << endl; // Convert to a wchar_t*wchar_t wcstring[newsize]; wcscpy_s(wcstring,(wchar_t*)orig); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; // Convert to a CComBSTRCComBSTR ccombstr((char*)orig);if(ccombstr.Append(L" (CComBSTR)")== S_OK){ CW2A printstr(ccombstr); cout << printstr << endl;} // Convert to a CStringCString cstring((char*)orig); cstring +=" (CString)"; cout << cstring << endl; // Convert to a basic_stringstring basicstring((char*)orig); basicstring +=" (basic_string)"; cout << basicstring << endl; // Convert to a System::StringString^systemstring = gcnew String((char*)orig); systemstring +=" (System::String)";Console::WriteLine("{0}", systemstring);delete systemstring;}输出
Hello,World!(_bstr_t)Hello,World!(char*)Hello,World!(wchar_t*)Hello,World!(CComBSTR)Hello,World!(CString)Hello,World!(basic_string)Hello,World!(System::String)从 CComBSTR 转换
示例
说明
此示例演示如何从 CComBSTR 转换为上面列出的其他字符串类型。
// convert_from_ccombstr.cpp// compile with /clr /link comsuppw.lib #include<iostream>#include<stdlib.h>#include<string> #include"atlbase.h"#include"atlstr.h"#include"comutil.h"#include"vcclr.h" usingnamespace std;usingnamespaceSystem;usingnamespaceSystem::Runtime::InteropServices; int main(){CComBSTR orig("Hello, World!"); CW2A printstr(orig); cout << printstr <<" (CComBSTR)"<< endl; // Convert to a char*constsize_t newsize =100;char nstring[newsize]; CW2A tmpstr1(orig); strcpy_s(nstring, tmpstr1); strcat_s(nstring," (char *)"); cout << nstring << endl; // Convert to a wchar_t*wchar_t wcstring[newsize]; wcscpy_s(wcstring, orig); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; // Convert to a _bstr_t_bstr_t bstrt(orig); bstrt +=" (_bstr_t)"; cout << bstrt << endl; // Convert to a CStringCString cstring(orig); cstring +=" (CString)"; cout << cstring << endl; // Convert to a basic_string wstring basicstring(orig); basicstring += L" (basic_string)"; wcout << basicstring << endl; // Convert to a System::StringString^systemstring = gcnew String(orig); systemstring +=" (System::String)";Console::WriteLine("{0}", systemstring);delete systemstring;}输出
Hello,World!(CComBSTR)Hello,World!(char*)Hello,World!(wchar_t*)Hello,World!(_bstr_t)Hello,World!(CString)Hello,World!(basic_string)Hello,World!(System::String)从 CString 转换
示例
说明
此示例演示如何从 CString 转换为上面列出的其他字符串类型。
// convert_from_cstring.cpp// compile with /clr /link comsuppw.lib #include<iostream>#include<stdlib.h>#include<string> #include"atlbase.h"#include"atlstr.h"#include"comutil.h" usingnamespace std;usingnamespaceSystem; int main(){CString orig("Hello, World!"); wcout << orig <<" (CString)"<< endl; // Convert to a char*constsize_t newsize =100;char nstring[newsize]; strcpy_s(nstring, orig); strcat_s(nstring," (char *)"); cout << nstring << endl; // Convert to a wchar_t*// You must first convert to a char * for this to work.size_t origsize = strlen(orig)+1;size_t convertedChars =0;wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; // Convert to a _bstr_t_bstr_t bstrt(orig); bstrt +=" (_bstr_t)"; cout << bstrt << endl; // Convert to a CComBSTRCComBSTR ccombstr(orig);if(ccombstr.Append(L" (CComBSTR)")== S_OK){ CW2A printstr(ccombstr); cout << printstr << endl;} // Convert to a basic_stringstring basicstring(orig); basicstring +=" (basic_string)"; cout << basicstring << endl; // Convert to a System::StringString^systemstring = gcnew String(orig); systemstring +=" (System::String)";Console::WriteLine("{0}", systemstring);delete systemstring;}输出
Hello,World!(CString)Hello,World!(char*)Hello,World!(wchar_t*)Hello,World!(_bstr_t)Hello,World!(CComBSTR)Hello,World!(basic_string)Hello,World!(System::String)从 basic_string 转换
示例
说明
此示例演示如何从 basic_string 转换为上面列出的其他字符串类型。
// convert_from_basic_string.cpp// compile with /clr /link comsuppw.lib #include<iostream>#include<stdlib.h>#include<string> #include"atlbase.h"#include"atlstr.h"#include"comutil.h" usingnamespace std;usingnamespaceSystem; int main(){string orig("Hello, World!"); cout << orig <<" (basic_string)"<< endl; // Convert to a char*constsize_t newsize =100;char nstring[newsize]; strcpy_s(nstring, orig.c_str()); strcat_s(nstring," (char *)"); cout << nstring << endl; // Convert to a wchar_t*// You must first convert to a char * for this to work.size_t origsize = strlen(orig.c_str())+1;size_t convertedChars =0;wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; // Convert to a _bstr_t_bstr_t bstrt(orig.c_str()); bstrt +=" (_bstr_t)"; cout << bstrt << endl; // Convert to a CComBSTRCComBSTR ccombstr(orig.c_str());if(ccombstr.Append(L" (CComBSTR)")== S_OK){ CW2A printstr(ccombstr); cout << printstr << endl;} // Convert to a CStringCString cstring(orig.c_str()); cstring +=" (CString)"; cout << cstring << endl; // Convert to a System::StringString^systemstring = gcnew String(orig.c_str()); systemstring +=" (System::String)";Console::WriteLine("{0}", systemstring);delete systemstring;}输出
Hello,World!(basic_string)Hello,World!(char*)Hello,World!(wchar_t*)Hello,World!(_bstr_t)Hello,World!(CComBSTR)Hello,World!(CString)Hello,World!(System::String)从 System::String 转换
示例
说明
此示例演示如何从 System.String 转换为上面列出的其他字符串类型。
// convert_from_system_string.cpp// compile with /clr /link comsuppw.lib #include<iostream>#include<stdlib.h>#include<string> #include"atlbase.h"#include"atlstr.h"#include"comutil.h"#include"vcclr.h" usingnamespace std;usingnamespaceSystem;usingnamespaceSystem::Runtime::InteropServices; int main(){String^orig = gcnew String("Hello, World!");Console::WriteLine("{0} (System::String)", orig); pin_ptr<constwchar_t> wch =PtrToStringChars(orig); // Convert to a char*size_t origsize = wcslen(wch)+1;constsize_t newsize =100;size_t convertedChars =0;char nstring[newsize]; wcstombs_s(&convertedChars, nstring, origsize, wch, _TRUNCATE); strcat_s(nstring," (char *)"); cout << nstring << endl; // Convert to a wchar_t*wchar_t wcstring[newsize]; wcscpy_s(wcstring, wch); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; // Convert to a _bstr_t_bstr_t bstrt(wch); bstrt +=" (_bstr_t)"; cout << bstrt << endl; // Convert to a CComBSTRCComBSTR ccombstr(wch);if(ccombstr.Append(L" (CComBSTR)")== S_OK){ CW2A printstr(ccombstr); cout << printstr << endl;} // Convert to a CStringCString cstring(wch); cstring +=" (CString)"; cout << cstring << endl; // Convert to a basic_string wstring basicstring(wch); basicstring += L" (basic_string)"; wcout << basicstring << endl; delete orig;}输出
Hello,World!(System::String)Hello,World!(char*)Hello,World!(wchar_t*)Hello,World!(_bstr_t)Hello,World!(CComBSTR)Hello,World!(CString)Hello,World!(basic_string) 转自:http://blog.donews.com/keo321/?p=1583425标签: c++, C++字符串类型转换 发布时间:2013-04-27
�Ķ�ģʽ — An Arc90 Laboratory Experiment转载于:https://www.cnblogs.com/Dennis-mi/articles/3461533.html