zoukankan      html  css  js  c++  java
  • 【转】How to: Convert Between Various String Types

    转自:http://msdn.microsoft.com/en-us/library/ms235631%28VS.80%29.aspx

    This topic demonstrates how to convert various Visual C++ string types into other strings. The strings types that are covered include char *, wchar_t*, _bstr_t, CComBSTR, CString, basic_string, and System.String. In all cases, a copy of the string is made when converted to the new type. Any changes made to the new string will not affect the original string, and vice versa.

    Converting from char *

    Example

    This example demonstrates how to convert from a char * to the 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)

    Converting from wchar_t *

    Example

    This example demonstrates how to convert from a wchar_t * to the 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)

    Converting from _bstr_t

    Example

    This example demonstrates how to convert from a _bstr_t to the 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)

    Converting from CComBSTR

    Example

    This example demonstrates how to convert from a CComBSTR to the 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)
     

    Converting from CString

    Example

    This example demonstrates how to convert from a CString to the 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)

    Converting from basic_string

    Example

    This example demonstrates how to convert from a basic_string to the 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)

    Converting from System::String

    Example

    This example demonstrates how to convert from a System.String to the 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)

  • 相关阅读:
    jsoup
    【伪装位置神器】神行者AnyLocation 1.3.0001可用于微信,陌陌
    MD5 哈希等各种加密方式 都是对这个对象进行各种运算, 然后得出1个字符串
    【html】param 以及 embed 的有关 flash 属性详解
    【css】绝对定位的元素在 ie6 下不显示
    【javascript】浮点数运算问题分析及解决方法
    【jquery】邮箱自动补全 + 上下翻动
    【javascript】设为首页——setHome
    【javascript】js 检验密码强度
    【jquery】jquery 自定义滚动条
  • 原文地址:https://www.cnblogs.com/fzzl/p/2152039.html
Copyright © 2011-2022 走看看