本主题演示如何将各种 Visual C++ 字符串类型转换为其他字符串。可以转换的字符串类型包括
char *、
wchar_t*、 _bstr_t 、 CComBSTR 、 CString 、 basic_string 和 System
::String 。在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。对新字符串进行的任何更改都不会影响原始字符串,反之亦然。
1、此示例演示如何从 char * 转换为上面列出的其他字符串类型。
2、此示例演示如何从 wchar_t * 转换为上面列出的其他字符串类型。
3、此示例演示如何从 _bstr_t 转换为上面列出的其他字符串类型。
4、此示例演示如何从 CComBSTR 转换为上面列出的其他字符串类型。
5、此示例演示如何从 CString 转换为上面列出的其他字符串类型。
6、此示例演示如何从 basic_string 转换为上面列出的其他字符串类型。
7、此示例演示如何从 System ::String 转换为上面列出的其他字符串类型。
1、此示例演示如何从 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 "
using namespace std;
using namespace System;
int main()
{
char * orig = " Hello, World! " ;
cout << orig << " (char *) " << endl;
// Convert to a wchar_t*
size_t origsize = strlen(orig) + 1 ;
const size_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;
}
// compile with: /clr /link comsuppw.lib
#include < iostream >
#include < stdlib.h >
#include < string >
#include " atlbase.h "
#include " atlstr.h "
#include " comutil.h "
using namespace std;
using namespace System;
int main()
{
char * orig = " Hello, World! " ;
cout << orig << " (char *) " << endl;
// Convert to a wchar_t*
size_t origsize = strlen(orig) + 1 ;
const size_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;
}
2、此示例演示如何从 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 "
using namespace std;
using namespace System;
int main()
{
wchar_t * orig = L " Hello, World! " ;
wcout << orig << L " (wchar_t *) " << endl;
// Convert to a char*
size_t origsize = wcslen(orig) + 1 ;
const size_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;
}
// compile with: /clr /link comsuppw.lib
#include < iostream >
#include < stdlib.h >
#include < string >
#include " atlbase.h "
#include " atlstr.h "
#include " comutil.h "
using namespace std;
using namespace System;
int main()
{
wchar_t * orig = L " Hello, World! " ;
wcout << orig << L " (wchar_t *) " << endl;
// Convert to a char*
size_t origsize = wcslen(orig) + 1 ;
const size_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;
}
3、此示例演示如何从 _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 "
using namespace std;
using namespace System;
int main()
{
_bstr_t orig( " Hello, World! " );
wcout << orig << " (_bstr_t) " << endl;
// Convert to a char*
const size_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;
}
// compile with: /clr /link comsuppw.lib
#include < iostream >
#include < stdlib.h >
#include < string >
#include " atlbase.h "
#include " atlstr.h "
#include " comutil.h "
using namespace std;
using namespace System;
int main()
{
_bstr_t orig( " Hello, World! " );
wcout << orig << " (_bstr_t) " << endl;
// Convert to a char*
const size_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;
}
4、此示例演示如何从 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 "
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
int main()
{
CComBSTR orig( " Hello, World! " );
CW2A printstr(orig);
cout << printstr << " (CComBSTR) " << endl;
// Convert to a char*
const size_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;
}
// 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 "
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
int main()
{
CComBSTR orig( " Hello, World! " );
CW2A printstr(orig);
cout << printstr << " (CComBSTR) " << endl;
// Convert to a char*
const size_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;
}
5、此示例演示如何从 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 "
using namespace std;
using namespace System;
int main()
{
CString orig( " Hello, World! " );
wcout << orig << " (CString) " << endl;
// Convert to a char*
const size_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;
}
// compile with: /clr /link comsuppw.lib
#include < iostream >
#include < stdlib.h >
#include < string >
#include " atlbase.h "
#include " atlstr.h "
#include " comutil.h "
using namespace std;
using namespace System;
int main()
{
CString orig( " Hello, World! " );
wcout << orig << " (CString) " << endl;
// Convert to a char*
const size_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;
}
6、此示例演示如何从 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 "
using namespace std;
using namespace System;
int main()
{
string orig( " Hello, World! " );
cout << orig << " (basic_string) " << endl;
// Convert to a char*
const size_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;
}
// compile with: /clr /link comsuppw.lib
#include < iostream >
#include < stdlib.h >
#include < string >
#include " atlbase.h "
#include " atlstr.h "
#include " comutil.h "
using namespace std;
using namespace System;
int main()
{
string orig( " Hello, World! " );
cout << orig << " (basic_string) " << endl;
// Convert to a char*
const size_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;
}
7、此示例演示如何从 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 "
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
int main()
{
String ^ orig = gcnew String( " Hello, World! " );
Console::WriteLine( " {0} (System::String) " , orig);
pin_ptr < const wchar_t > wch = PtrToStringChars(orig);
// Convert to a char*
size_t origsize = wcslen(wch) + 1 ;
const size_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;
}
// 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 "
using namespace std;
using namespace System;
using namespace System::Runtime::InteropServices;
int main()
{
String ^ orig = gcnew String( " Hello, World! " );
Console::WriteLine( " {0} (System::String) " , orig);
pin_ptr < const wchar_t > wch = PtrToStringChars(orig);
// Convert to a char*
size_t origsize = wcslen(wch) + 1 ;
const size_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;
}