How does visual c ++ convert string types?

Source: Internet
Author: User

This topic demonstrates how to convert various C ++ string types to other strings. The string types that can be converted includeChar *,Wchar_t *, _ Bstr_t, ccombstr, cstring, basic_string, and system. String. In all cases, a copy of the string is created when a string is converted to a new type. Any changes made to the new string will not affect the original string, and vice versa.

Example of conversion from char *

This example shows howChar *Convert to other string types listed above.

// 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;}
Output
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)
Example of conversion from wchar_t *

This example shows howWchar_t *Convert to other string types listed above.

// 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;}
Output
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)
Example of conversion from _ bstr_t

This example shows how_ Bstr_tConvert to other string types listed above.

// 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;}
Output
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)
Example of ccombstr Conversion

This example shows howCcombstrConvert to other string types listed above.

// 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;}
Output
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)
Example of cstring Conversion

This example shows howCstringConvert to other string types listed above.

// 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;}
Output
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)
Example of conversion from basic_string

This example shows howBasic_stringConvert to other string types listed above.

// 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;}
Output
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)
Example of conversion from system: String

This example shows howSystem. StringConvert to other string types listed above.

// 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;}
Output
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)

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.