在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 CComBSTR
- CComBSTR ccombstr(orig);
- if(ccombstr.Append(L" (CComBSTR)")== S_OK)
- {
- CW2A printstr(ccombstr);
- cout << printstr << endl;
- }
- // Convert to a CString
- CString cstring(orig);
- cstring +=" (CString)";
- cout << cstring << endl;
- // Convert to a basic_string
- string basicstring(orig);
- basicstring +=" (basic_string)";
- cout << basicstring << endl;
- // Convert to a System::String
- String^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 CComBSTR
- CComBSTR ccombstr(orig);
- if(ccombstr.Append(L" (CComBSTR)")== S_OK)
- {
- CW2A printstr(ccombstr);
- cout << printstr << endl;
- }
- // Convert to a CString
- CString 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::String
- String^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 CComBSTR
- CComBSTR ccombstr((char*)orig);
- if(ccombstr.Append(L" (CComBSTR)")== S_OK)
- {
- CW2A printstr(ccombstr);
- cout << printstr << endl;
- }
- // Convert to a CString
- CString cstring((char*)orig);
- cstring +=" (CString)";
- cout << cstring << endl;
- // Convert to a basic_string
- string basicstring((char*)orig);
- basicstring +=" (basic_string)";
- cout << basicstring << endl;
- // Convert to a System::String
- String^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 CString
- CString 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::String
- String^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 CComBSTR
- CComBSTR ccombstr(orig);
- if(ccombstr.Append(L" (CComBSTR)")== S_OK)
- {
- CW2A printstr(ccombstr);
- cout << printstr << endl;
- }
- // Convert to a basic_string
- string basicstring(orig);
- basicstring +=" (basic_string)";
- cout << basicstring << endl;
- // Convert to a System::String
- String^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 CComBSTR
- CComBSTR ccombstr(orig.c_str());
- if(ccombstr.Append(L" (CComBSTR)")== S_OK)
- {
- CW2A printstr(ccombstr);
- cout << printstr << endl;
- }
- // Convert to a CString
- CString cstring(orig.c_str());
- cstring +=" (CString)";
- cout << cstring << endl;
- // Convert to a System::String
- String^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 CComBSTR
- CComBSTR ccombstr(wch);
- if(ccombstr.Append(L" (CComBSTR)")== S_OK)
- {
- CW2A printstr(ccombstr);
- cout << printstr << endl;
- }
- // Convert to a CString
- CString 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)
标签: c++, C++字符串类型转换 发布时间:2013-04-27