C++字符串类型转换

CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。

(1) char*转换成CString

  若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:

        char chArray[] = "Char test";
       TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)
        CString theString = chArray;
        theString.Format(_T("%s"), chArray);
        theString = p;

(2) CString转换成char*

  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

  方法一,使用强制转换。例如:

      CString theString( (_T("Char test "));
       LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

  方法二,使用strcpy。例如:

      CString theString( (_T("Char test "));
      LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
       _tcscpy(lpsz, theString);

  需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

  方法三,使用CString::GetBuffer。

       如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,例如:
      CString s(_T("Char test "));
       LPTSTR p = s.GetBuffer();

      LPTSTR dot = strchr(p, ''.'');

        // 在这里添加使用p的代码

        if(p != NULL)

       *p = _T('');
        s.ReleaseBuffer();                     // 使用完后及时释放,以便能使用其它的CString成员函数

       在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

----------------------------------------------------

其它数据类型转换为字符串

1。短整型(int) 
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 
itoa(i,temp,2); ///按二进制方式转换 
2。长整型(long) 
ltoa(l,temp,10); 
3。浮点数(float,double) 
用fcvt可以完成转换,这是MSDN中的例子: 
int decimal, sign; 
char *buffer; 
double source = 3.1415926535; 
buffer = _fcvt( source, 7, &decimal, &sign ); 
运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 
decimal表示小数点的位置,sign表示符号:0为正数,1为负数 
4。CString变量 
str = "2008北京奥运"; 
buf = (LPSTR)(LPCTSTR)str; 
5。BSTR变量 
BSTR bstrValue = ::SysAllocString(L"程序员"); 
char * buf = _com_util::ConvertBSTRToString(bstrValue); 
SysFreeString(bstrValue); 
AfxMessageBox(buf); 
delete(buf); 
6。CComBSTR变量 
CComBSTR bstrVar("test"); 
char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); 
AfxMessageBox(buf); 
delete(buf);

7。_bstr_t变量 
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用 
_bstr_t bstrVar("test"); 
const char *buf = bstrVar;///不要修改buf中的内容 
AfxMessageBox(buf);


8。通用方法(针对非COM数据类型) 
用sprintf完成转换 
char buffer[200]; 
char c = '1'; 
int i = 35; 
long j = 1000; 
float f = 1.7320534f; 
sprintf( buffer, "%c",c); 
sprintf( buffer, "%d",i); 
sprintf( buffer, "%d",j); 
sprintf( buffer, "%f",f);


字符串转换实例

各种 C++ 字符串类型转换(char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String)
本主题演示如何将各种 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;
 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值