1、vC+中数据类型的转换【帖子汇编】在 C中有很多的数据类型,在编程的时候,对数据类型进行转换很常遇到的,我在编程过程中频繁遇到甚至头疼,于是在网上网罗各种方法帖子。因为时间有限没法一一整理,遂将各帖汇集一处,与大家共享。希望对大家有帮助。为方便大家区分各帖。每个帖的首页都是另起一页,不会直接跟在后一个帖后面。1、如何将 CString 变量转换为 int 变量2、如何将 int 变量转换 CString 为变量CString ss=“1212.12“; int temp=atoi(ss); CString aa; aa.Format(“%d“,temp); 3、CString 转换为 Doub
2、le4、Double 转换为 CStringCString strValue(“1.234“); double dblValue; dblValue = atof(LPCTSTR)strValue); 5、char*转换成 CString若将 char*转换成 CString,除了直接赋值外,还可使用 CString:Format 进行。例如:char chArray = “This is a test“;char * p = “This is a test“;或LPSTR p = “This is a test“;或在已定义 Unicode 应的用程序中TCHAR * p = _T(“Thi
3、s is a test“);或LPTSTR p = _T(“This is a test“);CString theString = chArray;theString.Format(_T(“%s“), chArray);theString = p;6、CString 转换成 char*若将 CString 类转换成 char*(LPSTR)类型,常常使用下列三种方法:方法一,使用强制转换。例如:CString theString( “This is a test“ );LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString; 方法二,使用 strcpy。例如:CStr
4、ing theString( “This is a test“ );LPTSTR lpsz = new TCHARtheString.GetLength()+1;_tcscpy(lpsz, theString); 需要说明的是,strcpy(或可移值 Unicode/MBCS 的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或 const char* (ANSI),系统编译器将会自动对其进行转换。方法三,使用 CString:GetBuffer。例如:CString s(_T(“This is a test “);LPTSTR p = s.GetBuffer(
5、);/ 在这里添加使用 p 的代码if(p != NULL) *p = _T(0);s.ReleaseBuffer(); / 使用完后及时释放,以便能使用其它的 CString 成员函数 7、BSTR 转换成 char*方法一,使用 ConvertBSTRToString。例如:#include #pragma comment(lib, “comsupp.lib“)int _tmain(int argc, _TCHAR* argv)BSTR bstrText = :SysAllocString(L“Test“);char* lpszText2 = _com_util:ConvertBSTRTo
6、String(bstrText);SysFreeString(bstrText); / 用完释放delete lpszText2;return 0; 方法二,使用_bstr_t 的赋值运算符重载。例如:_bstr_t b = bstrText;char* lpszText2 = b; 8、char*转换成 BSTR方法一,使用 SysAllocString 等 API 函数。例如:BSTR bstrText = :SysAllocString(L“Test“);BSTR bstrText = :SysAllocStringLen(L“Test“,4);BSTR bstrText = :SysA
7、llocStringByteLen(“Test“,4); 方法二,使用 COleVariant 或_variant_t。例如:/COleVariant strVar(“This is a test“);_variant_t strVar(“This is a test“);BSTR bstrText = strVar.bstrVal; 方法三,使用_bstr_t,这是一种最简单的方法。例如:BSTR bstrText = _bstr_t(“This is a test“); 方法四,使用 CComBSTR。例如:BSTR bstrText = CComBSTR(“This is a test“
8、); 或CComBSTR bstr(“This is a test“);BSTR bstrText = bstr.m_str; 方法五,使用 ConvertStringToBSTR。例如:char* lpszText = “Test“;BSTR bstrText = _com_util:ConvertStringToBSTR(lpszText); 9、CString 转换成 BSTR通常是通过使用 CStringT:AllocSysString 来实现。例如:CString str(“This is a test“);BSTR bstrText = str.AllocSysString();S
9、ysFreeString(bstrText); / 用完释放 10、BSTR 转换成 CString一般可按下列方法进行:BSTR bstrText = :SysAllocString(L“Test“);CStringA str;str.Empty();str = bstrText; 或CStringA str(bstrText);11、ANSI、 Unicode 和宽字符之间的转换方法一,使用 MultiByteToWideChar 将 ANSI 字符转换成 Unicode 字符,使用 WideCharToMultiByte 将 Unicode 字符转换成 ANSI 字符。方法二,使用“_T
10、”将 ANSI 转换成“一般” 类型字符串,使用“L”将 ANSI 转换成 Unicode,而在托管 C+环境中还可使用 S 将 ANSI 字符串转换成 String*对象。例如:TCHAR tstr = _T(“this is a test“);wchar_t wszStr = L“This is a test“;String* str = S”This is a test”; 方法三,使用 ATL 7.0 的转换宏和类。ATL7.0 在原有 3.0 基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图 3 所示的统一形式:其中,第一个 C 表示“ 类 ”,以便于 ATL 3.0
11、宏相区别,第二个 C 表示常量,2 表示“to”,EX 表示要开辟一定大小的缓冲。SourceType 和 DestinationType 可以是 A、T、W 和 OLE,其含义分别是 ANSI、Unicode 、“ 一般”类型和 OLE 字符串。例如,CA2CT 就是将 ANSI 转换成一般类型的字符串常量。下面是一些示例代码:LPTSTR tstr= CA2TEX(“this is a test“);LPCTSTR tcstr= CA2CT(“this is a test“);wchar_t wszStr = L“This is a test“;char* chstr = CW2A(wsz
12、Str); Visual C+ 如何:在各种字符串类型之间进行转换本主题演示如何将各种 C+ 字符串类型转换为其他字符串。可以转换的字符串类型包括 char *、wchar_t*、_bstr_t、 CComBSTR、CString、basic_string 和 System.String。在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。对新字符串进行的任何更改都不会影响原始字符串,反之亦然。从 char * 转换示例说明此示例演示如何从 char * 转换为上面列出的其他字符串类型。/ convert_from_char.cpp/ compile with /clr /link
13、comsuppw.lib#include #include #include #include “atlbase.h“#include “atlstr.h“#include “comutil.h“using namespace std;using namespace System;int main()char *orig = “Hello, World!“;cout #include #include #include “atlbase.h“#include “atlstr.h“#include “comutil.h“using namespace std;using namespace Sy
14、stem;int main()wchar_t *orig = L“Hello, World!“;wcout #include #include #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 nstri
15、ngnewsize;strcpy_s(nstring, (char *)orig);strcat_s(nstring, “ (char *)“);cout nstring endl;/ Convert to a wchar_t*wchar_t wcstringnewsize;wcscpy_s(wcstring, (wchar_t *)orig);wcscat_s(wcstring, L“ (wchar_t *)“);wcout wcstring endl;/ Convert to a CComBSTRCComBSTR ccombstr(char *)orig);if (ccombstr.App
16、end(L“ (CComBSTR)“) = S_OK)CW2A printstr(ccombstr);cout printstr endl;/ Convert to a CStringCString cstring(char *)orig);cstring += “ (CString)“;cout cstring endl;/ Convert to a basic_stringstring basicstring(char *)orig);basicstring += “ (basic_string)“;cout basicstring endl;/ Convert to a System:S
17、tringString 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
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。