|
Posted on 2008-12-05 19:08 Thinkfeng 阅读(412) 评论(0) 编辑 收藏 引用
1int i = 100; 2long l = 2001; 3float f=300.2; 4double d=12345.119; 5char username[]="程佩君"; 6char temp[200]; 7char *buf; 8CString str; 9_variant_t v1; 10_bstr_t v2; 11
一、其它数据类型转换为字符串
1短整型(int) 2itoa(i,temp,10);/**////将i转换为字符串放入temp中,最后一个数字表示十进制 3itoa(i,temp,2); /**////按二进制方式转换 4长整型(long) 5ltoa(l,temp,10); 6浮点数(float,double) 7用fcvt可以完成转换,这是MSDN中的例子: 8int decimal, sign; 9char *buffer; 10double source = 3.1415926535; 11buffer = _fcvt( source, 7, &decimal, &sign ); 12运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 13decimal表示小数点的位置,sign表示符号:0为正数,1为负数 14CString变量 15str = "2008北京奥运"; 16buf = (LPSTR)(LPCTSTR)str; 17BSTR变量 18BSTR bstrValue = ::SysAllocString(L"程序员"); 19char * buf = _com_util::ConvertBSTRToString(bstrValue); 20SysFreeString(bstrValue); 21AfxMessageBox(buf); 22delete(buf); 23CComBSTR变量 24CComBSTR bstrVar("test"); 25char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); 26AfxMessageBox(buf); 27delete(buf); 28 29_bstr_t变量 30_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用 31_bstr_t bstrVar("test"); 32const char *buf = bstrVar;/**////不要修改buf中的内容 33AfxMessageBox(buf); 34 35 36通用方法(针对非COM数据类型) 37用sprintf完成转换 38 39char 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); 40
二、字符串转换为其它数据类型
1strcpy(temp,"123"); 2 3短整型(int) 4i = atoi(temp); 5长整型(long) 6l = atol(temp); 7浮点(double) 8d = atof(temp); 9CString变量 10CString name = temp; 11BSTR变量 12BSTR bstrValue = ::SysAllocString(L"程序员"); 13/**////完成对bstrValue的使用14SysFreeString(bstrValue); 15 16CComBSTR变量 17CComBSTR类型变量可以直接赋值 18CComBSTR bstrVar1("test"); 19CComBSTR bstrVar2(temp); 20 21_bstr_t变量 22_bstr_t类型的变量可以直接赋值 23_bstr_t bstrVar1("test"); 24_bstr_t bstrVar2(temp); 25
三、其它数据类型转换到CString
1使用CString的成员函数Format来转换,例如: 2 3 4整数(int) 5str.Format("%d",i); 6浮点数(float) 7str.Format("%f",i); 8字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 9str = username; 10对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char *,然后赋值给CString变量。
四、BSTR、_bstr_t与CComBSTR
1CComBSTR 是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。 2char *转换到BSTR可以这样: 3BSTR b=_com_util::ConvertStringToBSTR("数据");/**////使用前需要加上comutil.h和comsupp.lib 4SysFreeString(bstrValue); 5反之可以使用 6char *p=_com_util::ConvertBSTRToString(b); 7delete p; 8具体可以参考一,二段落里的具体说明。 9 10CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!=,==等操作,所以使用非常方便。 11特别是_bstr_t,建议大家使用它。
五、VARIANT 、_variant_t 与 COleVariant
1VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。 2对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子: 3VARIANT va; 4int a=2001; 5va.vt=VT_I4;/**////指明整型数据 6va.lVal=a; /**////赋值 7 8 9_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。 10使用时需加上#include <comdef.h> 11例如: 12long l=222; 13ing i=100; 14_variant_t lVal(l); 15lVal = (long)i; 16 17COleVariant的使用与_variant_t的方法基本一样,请参考如下例子: 18COleVariant v3 = "字符串", v4 = (long)1999; 19CString str =(BSTR)v3.pbstrVal; 20long i = v4.lVal; 21 22/**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 23本主题演示如何将各种 C++ 字符串类型转换为其他字符串。可以转换的字符串类型包括 char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string 和 System.String。在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。对新字符串进行的任何更改都不会影响原始字符串,反之亦然。 24 25
从 char * 转换
1//此示例演示如何从 char * 转换为上面列出的其他字符串类型。 2// convert_from_char.cpp 3// compile with /clr /link comsuppw.lib 4#include <iostream> 5include <stdlib.h>#include <string> 6#include "atlbase.h"#include "atlstr.h"#include "comutil.h" 7using namespace std;using namespace System; 8int main(){ char *orig = "Hello, World!"; cout << orig << " (char *)" << endl; 9 // 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; 10 // Convert to a _bstr_t _bstr_t bstrt(orig); bstrt += " (_bstr_t)"; cout << bstrt << endl; 11 // Convert to a CComBSTR CComBSTR ccombstr(orig); if (ccombstr.Append(L" (CComBSTR)") == S_OK) { CW2A printstr(ccombstr); cout << printstr << endl; } 12 // Convert to a CString CString cstring(orig); cstring += " (CString)"; cout << cstring << endl; 13 // Convert to a basic_string string basicstring(orig); basicstring += " (basic_string)"; cout << basicstring << endl; 14 // Convert to a System::String String ^systemstring = gcnew String(orig); systemstring += " (System::String)"; Console::WriteLine("{0}", systemstring); delete systemstring;}
1//输出 2Hello, World! (char *) 3Hello, World! (wchar_t *) 4Hello, World! (_bstr_t) 5Hello, World! (CComBSTR) 6Hello, World! (CString) 7Hello, World! (basic_string) 8Hello, World! (System::String)
从 wchar_t * 转换
1此示例演示如何从 wchar_t * 转换为上面列出的其他字符串类型。 2 3// convert_from_wchar_t.cpp// compile with /clr /link comsuppw.lib 4#include <iostream>#include <stdlib.h>#include <string> 5#include "atlbase.h"#include "atlstr.h"#include "comutil.h" 6using namespace std;using namespace System; 7int main(){ wchar_t *orig = L"Hello, World!"; wcout << orig << L" (wchar_t *)" << endl; 8 // 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; 9 // Convert to a _bstr_t _bstr_t bstrt(orig); bstrt += " (_bstr_t)"; cout << bstrt << endl; 10 // Convert to a CComBSTR CComBSTR ccombstr(orig); if (ccombstr.Append(L" (CComBSTR)") == S_OK) { CW2A printstr(ccombstr); cout << printstr << endl; } 11 // Convert to a CString CString cstring(orig); cstring += " (CString)"; cout << cstring << endl; 12 // Convert to a basic_string wstring basicstring(orig); basicstring += L" (basic_string)"; wcout << basicstring << endl; 13 // Convert to a System::String String ^systemstring = gcnew String(orig); systemstring += " (System::String)"; Console::WriteLine("{0}", systemstring); delete systemstring;} 14//输出 15Hello, World! (wchar_t *)Hello, World! (char *)Hello, World! (_bstr_t)Hello, World! (CComBSTR)Hello, World! (CString)Hello, World! (basic_string)Hello, World! (System::String)
1从 _bstr_t 转换 2 3 4示例 5 6说明 7此示例演示如何从 _bstr_t 转换为上面列出的其他字符串类型。 8 9// convert_from_bstr_t.cpp// compile with /clr /link comsuppw.lib 10#include <iostream>#include <stdlib.h>#include <string> 11#include "atlbase.h"#include "atlstr.h"#include "comutil.h" 12using namespace std;using namespace System; 13int main(){ _bstr_t orig("Hello, World!"); wcout << orig << " (_bstr_t)" << endl; 14 // Convert to a char* const size_t newsize = 100; char nstring[newsize]; strcpy_s(nstring, (char *)orig); strcat_s(nstring, " (char *)"); cout << nstring << endl; 15 // Convert to a wchar_t* wchar_t wcstring[newsize]; wcscpy_s(wcstring, (wchar_t *)orig); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; 16 // Convert to a CComBSTR CComBSTR ccombstr((char *)orig); if (ccombstr.Append(L" (CComBSTR)") == S_OK) { CW2A printstr(ccombstr); cout << printstr << endl; } 17 // Convert to a CString CString cstring((char *)orig); cstring += " (CString)"; cout << cstring << endl; 18 // Convert to a basic_string string basicstring((char *)orig); basicstring += " (basic_string)"; cout << basicstring << endl; 19 // Convert to a System::String String ^systemstring = gcnew String((char *)orig); systemstring += " (System::String)"; Console::WriteLine("{0}", systemstring); delete systemstring;} 输出 20Hello, World! (_bstr_t)Hello, World! (char *)Hello, World! (wchar_t *)Hello, World! (CComBSTR)Hello, World! (CString)Hello, World! (basic_string)Hello, World! (System::String) 21从 CComBSTR 转换 22 23 24示例 25 26说明 27此示例演示如何从 CComBSTR 转换为上面列出的其他字符串类型。 28 29// convert_from_ccombstr.cpp// compile with /clr /link comsuppw.lib 30#include <iostream>#include <stdlib.h>#include <string> 31#include "atlbase.h"#include "atlstr.h"#include "comutil.h"#include "vcclr.h" 32using namespace std;using namespace System;using namespace System::Runtime::InteropServices; 33int main(){ CComBSTR orig("Hello, World!"); CW2A printstr(orig); cout << printstr << " (CComBSTR)" << endl; 34 // 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; 35 // Convert to a wchar_t* wchar_t wcstring[newsize]; wcscpy_s(wcstring, orig); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; 36 // Convert to a _bstr_t_bstr_t bstrt(orig); bstrt += " (_bstr_t)"; cout << bstrt << endl; 37 // Convert to a CString CString cstring(orig); cstring += " (CString)"; cout << cstring << endl; 38 // Convert to a basic_string wstring basicstring(orig); basicstring += L" (basic_string)"; wcout << basicstring << endl; 39 // Convert to a System::String String ^systemstring = gcnew String(orig); systemstring += " (System::String)"; Console::WriteLine("{0}", systemstring); delete systemstring;} 输出 40Hello, World! (CComBSTR)Hello, World! (char *)Hello, World! (wchar_t *)Hello, World! (_bstr_t)Hello, World! (CString)Hello, World! (basic_string)Hello, World! (System::String) 41从 CString 转换 42 43 44示例 45 46说明 47此示例演示如何从 CString 转换为上面列出的其他字符串类型。 48 49// convert_from_cstring.cpp// compile with /clr /link comsuppw.lib 50#include <iostream>#include <stdlib.h>#include <string> 51#include "atlbase.h"#include "atlstr.h"#include "comutil.h" 52using namespace std;using namespace System; 53int main(){ CString orig("Hello, World!"); wcout << orig << " (CString)" << endl; 54 // Convert to a char* const size_t newsize = 100; char nstring[newsize]; strcpy_s(nstring, orig); strcat_s(nstring, " (char *)"); cout << nstring << endl; 55 // 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; 56 // Convert to a _bstr_t _bstr_t bstrt(orig); bstrt += " (_bstr_t)"; cout << bstrt << endl; 57 // Convert to a CComBSTR CComBSTR ccombstr(orig); if (ccombstr.Append(L" (CComBSTR)") == S_OK) { CW2A printstr(ccombstr); cout << printstr << endl; } 58 // Convert to a basic_string string basicstring(orig); basicstring += " (basic_string)"; cout << basicstring << endl; 59 // Convert to a System::String String ^systemstring = gcnew String(orig); systemstring += " (System::String)"; Console::WriteLine("{0}", systemstring); delete systemstring;} 输出 60Hello, World! (CString)Hello, World! (char *)Hello, World! (wchar_t *)Hello, World! (_bstr_t)Hello, World! (CComBSTR)Hello, World! (basic_string)Hello, World! (System::String) 61从 basic_string 转换 62 63 64示例 65 66说明 67此示例演示如何从 basic_string 转换为上面列出的其他字符串类型。 68 69// convert_from_basic_string.cpp// compile with /clr /link comsuppw.lib 70#include <iostream>#include <stdlib.h>#include <string> 71#include "atlbase.h"#include "atlstr.h"#include "comutil.h" 72using namespace std;using namespace System; 73int main(){ string orig("Hello, World!"); cout << orig << " (basic_string)" << endl; 74 // 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; 75 // 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; 76 // Convert to a _bstr_t _bstr_t bstrt(orig.c_str()); bstrt += " (_bstr_t)"; cout << bstrt << endl; 77 // Convert to a CComBSTR CComBSTR ccombstr(orig.c_str()); if (ccombstr.Append(L" (CComBSTR)") == S_OK) { CW2A printstr(ccombstr); cout << printstr << endl; } 78 // Convert to a CString CString cstring(orig.c_str()); cstring += " (CString)"; cout << cstring << endl; 79 // Convert to a System::String String ^systemstring = gcnew String(orig.c_str()); systemstring += " (System::String)"; Console::WriteLine("{0}", systemstring); delete systemstring;}输出 80 81 82 83 84Hello, World! (basic_string)Hello, World! (char *)Hello, World! (wchar_t *)Hello, World! (_bstr_t)Hello, World! (CComBSTR)Hello, World! (CString)Hello, World! (System::String) 85从 System::String 转换 86 87 88示例 89 90说明 91此示例演示如何从 System.String 转换为上面列出的其他字符串类型。 92 93// convert_from_system_string.cpp// compile with /clr /link comsuppw.lib 94#include <iostream>#include <stdlib.h>#include <string> 95#include "atlbase.h"#include "atlstr.h"#include "comutil.h"#include "vcclr.h" 96using namespace std;using namespace System;using namespace System::Runtime::InteropServices; 97int main(){ String ^orig = gcnew String("Hello, World!"); Console::WriteLine("{0} (System::String)", orig); 98 pin_ptr<const wchar_t> wch = PtrToStringChars(orig); 99 // 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; 100 // Convert to a wchar_t* wchar_t wcstring[newsize]; wcscpy_s(wcstring, wch); wcscat_s(wcstring, L" (wchar_t *)"); wcout << wcstring << endl; 101 // Convert to a _bstr_t _bstr_t bstrt(wch); bstrt += " (_bstr_t)"; cout << bstrt << endl; 102// Convert to a CComBSTR 103 CComBSTR ccombstr(wch); if (ccombstr.Append(L" (CComBSTR)") == S_OK) { CW2A printstr(ccombstr); cout << printstr << endl; } 104 // Convert to a CString CString cstring(wch); cstring += " (CString)"; cout << cstring << endl; 105 // Convert to a basic_string wstring basicstring(wch); basicstring += L" (basic_string)"; wcout << basicstring << endl; 106 delete orig;} 输出 107Hello, World! (System::String)Hello, World! (char *)Hello, World! (wchar_t *)Hello, World! (_bstr_t)Hello, World! (CComBSTR)Hello, World! (CString)Hello, World! (basic_string)
|