(转)C++ 字符串类型转换为其他字符串

本主题演示如何将各种 C++ 字符串类型转换为其他字符串。可以转换的字符串类型包括 char *wchar_t*_bstr_tCComBSTRCStringbasic_string和 System.String。在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。对新字符串进行的任何更改都不会影响原始字符串,反之亦然。

 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"

 

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;

}

输出

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"

 

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;

}

输出

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"

 

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;

}

输出

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"

 

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;

}

输出

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"

 

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;

}

输出

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"

 

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;

}

输出

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"

 

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;

}

输出

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)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值