各种 C++ 字符串类型转换
各种 C++ 字符串类型转换(char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String) 本主题演示如何将各种 C++ 字符串类型转换为其他字符串。可以转换的字符串类型包括 char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String。在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。对新字符串进行的任何更改都不会影响原始字符串,反之亦然。 ### 各种 C++ 字符串类型转换 在C++编程语言中,处理字符串是非常常见的需求之一。不同的字符串类型有着各自的特性和应用场景。本文将详细介绍几种常用的C++字符串类型(`char *`、`wchar_t*`、`_bstr_t`、`CComBSTR`、`CString`、`basic_string` 和 `System.String`)之间的转换方法,并通过示例代码加以解释。 #### 1. `char *` 类型转换 `char *`是最基本的字符指针类型,它表示一个由字符组成的数组。当需要与其他字符串类型进行转换时,通常需要创建一个新的字符串对象来存储转换后的数据。 **示例:** ```cpp char* orig = "Hello, World!"; // 将char*转换为wchar_t* size_t origSize = strlen(orig) + 1; size_t newsize = 100; size_t convertedChars = 0; wchar_t wcString[newsize]; mbstowcs_s(&convertedChars, wcString, origSize, orig, _TRUNCATE); // 将char*转换为_bstr_t _bstr_t bstrT(orig); ``` #### 2. `wchar_t*` 类型转换 `wchar_t*`是一种宽字符指针类型,用于存储宽字符,常用于支持多字节编码如UTF-16。 **示例:** ```cpp wchar_t* origW = L"Hello, World!"; // 将wchar_t*转换为char* size_t origSizeW = wcslen(origW) + 1; char nString[100]; wcstombs_s(&convertedChars, nString, origSizeW, origW, _TRUNCATE); ``` #### 3. `_bstr_t` 类型转换 `_bstr_t`是ATL库提供的用于封装OLE字符串的一个类。它通常用于COM编程环境中。 **示例:** ```cpp _bstr_t bstrT("Hello, World!"); // 使用_bstr_t转换为wchar_t* wchar_t* wcStr = bstrT; // 或者转换为char* char* cStr = (char*)bstrT; ``` #### 4. `CComBSTR` 类型转换 `CComBSTR`也是ATL库提供的一个类,用于封装OLE字符串。与`_bstr_t`类似,但提供了更多的功能和便利性。 **示例:** ```cpp CComBSTR cCombstr("Hello, World!"); // 转换为wchar_t* wchar_t* wcStr = cCombstr; // 转换为char* char* cStr = (char*)cCombstr; ``` #### 5. `CString` 类型转换 `CString`是MFC框架中的字符串类,提供了一组丰富的字符串操作方法。 **示例:** ```cpp CString cString("Hello, World!"); // 转换为wchar_t* wchar_t* wcStr = cString.GetBuffer(); // 转换为char* char* cStr = cString.GetBuffer(); ``` #### 6. `basic_string` 类型转换 `basic_string`是C++标准库中的字符串容器类,能够存储任何字符类型。 **示例:** ```cpp std::basic_string<char> sString("Hello, World!"); // 转换为wchar_t* std::basic_string<wchar_t> wString(sString.begin(), sString.end()); // 转换为char* std::basic_string<char> cString(wString.begin(), wString.end()); ``` #### 7. `System.String` 类型转换 `System.String`是.NET Framework中的字符串类,用于CLR环境下的字符串操作。 **示例:** ```cpp using namespace System; String^ systemString = gcnew String("Hello, World!"); // 转换为wchar_t* wchar_t* wcStr = (wchar_t*)systemString->ToCharArray(); // 转换为char* char* cStr = (char*)systemString->ToString().c_str(); ``` ### 总结 以上示例展示了如何在C++中将不同类型的字符串相互转换。需要注意的是,在进行字符串类型转换时,通常会创建新的字符串对象来存储转换后的数据,这意味着对新字符串的任何修改都不会影响到原始字符串。这种设计确保了数据的安全性和独立性,但也可能会带来额外的内存开销。因此,在实际编程过程中,开发者需要根据具体的应用场景和性能需求来选择合适的字符串类型及其转换方式。
本主题演示如何将各种 C++ 字符串类型转换为其他字符串。可以转换的字符串类型包括 char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_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;
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
剩余16页未读,继续阅读
- 闪落世间2013-04-23不错,不过网上可以搜到免费的。。一样的
- mysqljava2013-11-30不错的类,特别是对其它转换的启发也很有用!
- 粉丝: 5
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#上位机开发源码 上位机项目源代码 采用基于RS485通讯总线的ModbusRtu协议,支持用户权限管理、sqlite数据库、实时曲线、历史曲线、历史报表、导出Excel、主界面布局可调带记忆等功能
- 基于plc的污水处理,组态王动画仿真,带PLC源代码,组态王源代码,图纸,IO地址分配
- Rhino(犀牛)插件ladybug-tools-1-8-0
- 三相10Kw光伏并网逆变器 包含全套理图 PCB 源代码
- MATLAB代码:考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型 关键词:碳捕集 综合能源系统 电转气P2G 热电联产 低碳调度 参考文档:Modeling and Optimiza
- 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程
- 基于mpx+vue+node.js的双端网盘系统的设计与实现源代码全套技术资料.zip
- welearn刷时长版本v3.0.bat
- 前端分析-2023071100789-y5
- 前端分析-2023071100789