MFC+类型转换
MFC中日期字符串的转换

MFC中⽇期字符串的转换⼀、将字符串2011-08-1800:00:00转换为字符串2011-8-18,通过以下的函数CString DataDeleteZero(CString DATA){CStringstrmonth,strday,stryear;intyear=0,month=0,day=0;year=atoi(DATA.Mid(0,4));month=atoi(DATA.Mid(5,2));day=atoi(DATA.Mid(8,2));if(month<10)month=atoi(DATA.Mid(6,2));if(day<10)day=atoi(DATA.Mid(9,2));stryear.Format("%d",year);strmonth.Format("%d",month);strday.Format("%d",day);DATA=stryear+"-"+strmonth+"-"+strday;returnDATA;}⼆、MFC获得⽇期控件时间的cstring格式变量定义:CString strDate;COleDateTime ole_time;CTime c_time;1、CString转换为COleDateTimestrDate = "2009-4-25 12:30:29";ole_time.ParseDateTime(strDate);2、COleDateTime转换为CStringstrDate = ole_time.Format("%Y-%m-%d %H:%M:%S");3、COleDateTime转换为CTimeSYSTEMTIME sys_time;ole_time.GetAsSystemTime(sys_time);c_time = CTime(sys_time);4、CTime转换为COleDateTimeSYSTEMTIME sys_time;c_time.GetAsSystemTime(sys_time);ole_time = COleDateTime(sys_time);5、CTime转换为CStringCTime Time;Time.Format(“%Y-%m-%d”);得到的是2011-08-18格式的字符串时间Time.Format(“%y-%m-%d”);得到的是11-08-18格式的字符串时间,年份和上⾯不⼀样了Time.Format(“%Y-%#m-%#d”);得到的是2011-8-18格式的字符串时间,可以把⽉份与⽇的“0”去掉Time.Format("%Y-%m-%d %H:%M:%S");得到的是2011-8-18 00:00:00格式的字符串时间。
mfc图像格式转化

色彩鲜艳漂亮的高品质图像,一个个形象的Windows图标,高速运动、活灵活现的三维动画,这些生动的图形无一不显示着程序设计者的艺术才华。
在程序设计中,图像处理已经成了每个程序员的必修课,所以,对于每个程序员来说,熟悉“BMP”、“GIF”、“JPEG”图像格式及具体应用、调色板、图像文件头格式、图像压缩算法等概念似乎已经成了工作中不可缺少的基础知识。
面对如此多的图像格式,如果要全部掌握其具体细节,好像这对程序员有些不公。
在VC中编程显示一幅位图,下列的步骤是不可少的:装入位图、获得位图的大小信息、启用设备环境、位传输,所需的程序代码显得千篇一律的冗长。
如果想要装入的位图另存为其他格式的图像文件……?两个字:头疼!而这一切都是因为GDI本身的局限性所造成。
随着Windows2000的推出,上面的情况有了大大的改观:你可以不必了解每种图像格式的具体含义,照样可以写出多格式图像浏览或转换程序,这一切,全部都依赖于Windows 2000及后继版中所使用的GDI+技术。
首先来看看GDI+的具体技术细节及GDI+编程特点。
Windows2000在用户界面方面包括了几个重大的改进,可能你已经注意到了有阴影的鼠标、渐入的工具条快速提示、透明的窗口、平滑地窗口变化等。
Windows 2000在界面上之所以有这么大的改进,完全是因为Windows2000采用了一种GDI(graphicsdeviceinterface:图形设备接口)。
这种GDI,以前叫GDI2k,现在有了一个更好听的名字:GDI+。
GDI+是一种新型的图形设备接口,它的主要特点在于它能够创建全新的用户桌面体系、能够轻易地完成二维或三维的图形处理,为桌面带来一种数字化的图片。
GDI 同时也提供了增强的图形处理技术,如常见的:alphablending、纹理、贴图、增强的文本及图片显示技术。
实际上,GDI 主要的特色就在于强调通过硬件加速来达到良好的视觉感受!同传统的GDI不同,GDI+中引入了对COM(组件对象模型)技术的支持,通过COM技术,GDI+简化了对图像文件的访问(打开、保存)程序:通过调用COM组件来实现的,GDI+扮演的只是指挥者,而非操作员。
MFC经典用API 作简繁体转换

//给wszUnicode分配内存
wszUnicode=new wchar_t[iLen+1];
//转换Gb码到Unicode码,使用了API函数MultiByteToWideChar
MultiByteToWideChar (936, 0, pszGbt, -1, wszUnicode,iLen);
//给pszGbt分配内存
pszGbt=new char[iLen*2+1];
//转换Gb码简体到Gb码繁体,使用API函数LCMapString
LCMapString(0x0804,LCMAP_TRADITIONAL_CHINESE, pszGbs, -1, pszGbt, iLen*2);
char* pszGbs=NULL; //Gb编码的简体字符
AnsiString sGb; //返回的字符串
int iLen=0; //需要转换的字符数
pszBig5=sBig.c_str(); //读入需要转换的字符参数
//计算转换的字符数
//转换Unicode码到Big5码,使用API函数WideCharToMultiByte
WideCharToMultiByte (950, 0, (PWSTR) wszUnicode, -1, pszBig5,iLen, NULL, NULL) ;
//返回Big5码字符
MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen);
//计算转换的字符数
iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;
MFC视图切换全总结

MFC视图切换全总结交流的朋友请加我QQ:451072182我的百度空间:/%BB%B6stephen/home单纯视图之间的切换单文档多视图切换是我在学习MFC中遇到的一个老大难问题,在今天总算是一一破解了。
我觉得视图切换分为三个等级,第一是在未切分窗格的情况下切换视图类;第二是在分割窗格的一个窗格内实行视图切换;第三是在分割窗格和未分割之间的切换和视图切换。
在MFC创建SDI的伊始,MFC默认的视图类是CView,如果CView 满足你的需求,可以直接单击finish,如果你不想让CView成为你的默认视图类,你可以在下图这个地方修改。
如果你忘记了修改默认的视图类这也没关系,我们可以在代码中改变:在App类里面有个函数叫InitInstance(),在这里面有一段代码CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(Cprogram8Doc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CView1)); //这里更改你的默认视图类,注意不要忘记包含头文件哦if (!pDocTemplate)return FALSE;AddDocTemplate(pDocTemplate);说完了默认视图类的更改,我们现在进入主题。
1、首先创建你需要切换的视图类,AddClass进入或者创建一个控件然后AddClass创建控件关联类,后者适用于Form之类的控件。
2、控制之处,比如菜单项单击、单击鼠标什么的,我是使用菜单项来切换窗口的void CMainFrame::OnView1(){// TODO: Add your command handler code hereSwitchToForm(IDD_FORMVIEW1);}void CMainFrame::OnView2(){// TODO: Add your command handler code hereSwitchToForm(IDD_FORMVIEW2);}3、SwitchToForm这个函数主要用于视图切换在这个函数中主要做以下几个动作:1、获得当前视图类指针和需要转换的视图类指针,如果是第一次使用需要New一个,并且与文档类关联;2、改变活动视图;3、显示新视图和隐藏旧视图;4、设置控件ID;5、调整框架视图。
MFC中CString与char和tring的转换

3 拷贝 & 赋值 & "引用内存块" 什么时候释放?
下面演示一段代码执行过程
void Test()
{
CString str("abcd");//str指向一引用内存块(引用内存块的引用计数为1,
长度为4,分配长度为4)
CString a;//a指向一初始数据状态,
a = str; //a与str指向同一引用内存块(引用内存块的引用计数为2,
这两个函数提供了与标准C的兼容转换。在实际中使用频率很高,但却是最容易出错的地方。这两个函数实际上返回的都是指针,但它们有何区别呢?以及调用它们后,幕后是做了怎样的处理过程呢?
(1) LPCTSTR 它的执行过程其实很简单,只是返回引用内存块的串地址。 它是作为操作符重载提供的,
所以在代码中有时可以隐式转换,而有时却需强制转制。如:
temp指向新分配引用内存块的串首地址(新
分配的引用内存块的引用计数为1,长度
为0,分配长度为10)
//同时原引用内存块引用计数减1. 只有str仍
指向原引用内存块(引用内存块的引用计数为1,
长度为4,分配长度为4)
strcpy(temp, "temp"); //a指向的引用内存块的引用计数为1,长度为0,分配长度为10
如何在MFC中其他类访问和交换文档Doc类与视图View类的数据

如何在MFC中其他类访问和交换文档Doc类与视图View类的数据在MFC的单文档里,每个类都有获得其他类指针的一套方法每个类都有获得其他类指针的一套方法.现归纳如下.为方便说明,现假设已用app wizard生成了一个SDI应用程序test,包含如下几个类: CT estApp,CTestDoc,CTestView,CMaimFrame 1:从视图类获得文档类指针如前所述,在视图类中需要引用文档类的地方之前,使用如下语句: CTestDoc *pDoc=(CTestDoc *)GetDocument();以后便可使用pDoc指针访问文档类.此处的强制类型转换在test应用程序中并不需要,因为该程序只有一个视图类,并且在InitInstance()重用SDI文档模板进行了装配.你可以在Test.cpp种的InitInstance()方法中看到如下语句:CSingleDocTemplate *pDocTemplate;pDocTemplate=newCSingleDocTemplate(IDR_MAINRAME,RUNTIME_CLASS(CTe stDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CTestView));AddDocTemplate(pDocTemplate);以及TestView.h中的定义:inline CTestDoc *CTestView::GetDocument(){return (CTestDoc *)m_pDocument;}简而言之,就是说CT estView的GetDocument()函数自然而然的认为CTestDoc是与它"相配"的.当生成了一个具有多个视图类的应用程序时,(如用CSplitterWnd将窗口分为两栏,但这两栏并非从同一种视图类派生就属于这种情况。
具体实现在本文讨论范围之外),只有一个视图类能与唯一的文档类用文档模板进行装配,那么在另外一个未经装配的类中要取得文档类的指针,则需进行强制类型转换。
mfc 十六进制字符串转十六进制数

当我们谈到MFC(Microsoft Foundation Class)的十六进制字符串转十六进制数时,我们需要先了解MFC框架的作用和概念。
MFC是微软公司开发的一种应用程序框架,用于开发基于Windows操作系统的C++应用程序。
MFC提供了大量的类和函数,以便开发者能够更容易地创建Windows应用程序。
而十六进制字符串转十六进制数是在这个框架下的一个具体应用,它涉及到了字符转换、数值计算和字符串处理等方面。
让我们从简单的概念开始,了解什么是十六进制字符串和十六进制数。
十六进制字符串是由0-9和A-F组成的字符串,其中A-F分别代表10-15这六个数字。
而十六进制数则是用这些数字表示的数值。
在MFC框架下,我们通常会遇到需要将十六进制字符串转换为十六进制数的情况,这就需要我们对MFC中相关的函数和方法进行深入了解。
在MFC中进行十六进制字符串转十六进制数的操作,通常会借助于CString类或者CByteArray类的一些方法来实现。
而在具体的实现过程中,我们可能需要考虑到字符编码、格式验证、异常处理等方面的问题。
在处理十六进制字符串时,还需要注意其长度、前缀0x的处理、大小写的区分等情况。
这个过程涉及到了字符串的处理、十六进制的转换、数据的类型转换等多个方面的知识。
对于这个主题,我个人认为最重要的是深入理解MFC中提供的字符处理和数值处理相关的类和方法,掌握其使用方法和注意事项。
我在实际应用中也经常遇到这个问题,因此有着丰富的实践经验和心得体会。
我希望通过这篇文章,能够帮助读者更好地理解MFC框架下的十六进制字符串转十六进制数,并掌握相关的实际应用技巧。
在文章的我会总结和回顾这些技巧,并结合我的经验,提出一些建议和注意事项。
让读者在学习的能够更深刻地领悟这一知识点。
在整篇文章中,我将详细介绍相应的MFC类和方法,以及具体的代码实现,以便读者能够更具体地理解。
我也会结合一些实际的案例和应用场景,来帮助读者更好地掌握这一知识。
MFC数据库时间转换

VC/MFC 时间格式转换和比较大小CString转为COleDateTime弄了好久终于完成了时间格式转换比较的问题,在这里分享下我的一点点经验吧,嘿嘿我用的数据库是SQL Server2005,数据库表中有一类型为smalldatetime的数据,用于存放发车时间(比如:2010-1-1 10:00:00)要求在VC++里面提取该时间并和当前系统时间进行比较,判断大小void CSaleDlg::OnBtnSurebuy(){// TODO: Add your control notification handler code hereUpdateData(TRUE);m_Editbc.TrimLeft();m_Editbc.TrimRight();CBus lt;if(!lt.IfExistId(m_Editbc)){MessageBox("该班次不存在,请重新输入!");return;}//////////////////////////////获得该班次发车时间CBus it;it.GetData(m_Editbc);CString str1 = "";str1+=it.GetRunTime();/////////////////////////////获得系统当前时间COleDateTime;COleDateTime datetime;datetime=COleDateTime::GetCurrentTime();CString str2=datetime.Format("%Y-%m-%d %H:%M:%S"); //设置系统时间格式,为了和数据库里时间格式一致////////////////////////////时间格式转换比较CString转为COleDateTime,COleDateTime类型的时间可以直接比较大小COleDateTime t;t.ParseDateTime( str1 ); //将表里的CString类型时间转换为COleDateTimeCOleDateTime p;p.ParseDateTime( str2 ); //将获得的系统时间CString型转为COleDateTime if( t<=p) //直接判断大小{MessageBox("该班次已发车!无法购票!");return;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC++类型转换整理已有 84 次阅读2009-11-30 16:18标签: 类型1、CString to char*经过类型强制转换,可以将CString类型转换成char*,例如:CString cStr = "Hello,world!";char* zStr = (char*)(LPCTSTR)cStr;2、char* to CStringchar*类型可以直接给CString,完成自动转换,例如:char* zStr = "Hello,world!";CString cStr = zStr;3、CString to LPCSTR将CString转换成LPCSTR,需要获得CString的长度,例如:CString cStr = _T("Hello,world!");int nLen = cStr.GetLength();LPCSTR lpszBuf = cStr.GetBuffer(nLen);4、CString to LPSTR这个和第3个技巧是一样的,例如:CString cStr = _T("Hello,world!");int nLen = str.GetLength();LPSTR lpszBuf = str.GetBuffer(nLen);5、Char[] to int将字符串类型转换成整数型,可以使用atoi函数,例如:char c[10];int n;n = atoi©;6、Char[] to float和第5个技巧一样,使用atof()函数可以转换成float型,例如:char c[10];float f;f = atof©;7、Char* to int和第5个技巧完全一样,例如:char *str = "100";int i;i = atoi(str);一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long)ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str;BSTR类型的_variant_t变量v1 = (_bstr_t)"程序员";buf = _com_util::ConvertBSTRToString((_bstr_t)v1);三、字符串转换为其它数据类型strcpy(temp,"123");短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);四、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i);浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值str = username;五、BSTR、_bstr_t与CComBSTRCComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。
char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h反之可以使用char *p=_com_util::ConvertBSTRToString(b);六、VARIANT 、_variant_t 与 COleVariantVARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:VARIANT va;int a=2001;va.vt=VT_I4;///指明整型数据va.lVal=a; ///赋值对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:unsigned char bVal; VT_UI1short iVal; VT_I2long lVal; VT_I4float fltVal; VT_R4double dblVal; VT_R8VARIANT_BOOL boolVal; VT_BOOLSCODE scode; VT_ERRORCY cyVal; VT_CYDATE date; VT_DATEBSTR bstrVal; VT_BSTRIUnknown FAR* punkVal; VT_UNKNOWNIDispatch FAR* pdispVal; VT_DISPATCHSAFEARRAY FAR* parray; VT_ARRAY|*unsigned char FAR* pbVal; VT_BYREF|VT_UI1short FAR* piVal; VT_BYREF|VT_I2long FAR* plVal; VT_BYREF|VT_I4float FAR* pfltVal; VT_BYREF|VT_R4double FAR* pdblVal; VT_BYREF|VT_R8VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOLSCODE FAR* pscode; VT_BYREF|VT_ERRORCY FAR* pcyVal; VT_BYREF|VT_CYDATE FAR* pdate; VT_BYREF|VT_DATEBSTR FAR* pbstrVal; VT_BYREF|VT_BSTRIUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWNIDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCHSAFEARRAY FAR* FAR* pparray; VT_ARRAY|*VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANTvoid FAR* byref; VT_BYREF_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
例如:long l=222;ing i=100;_variant_t lVal(l);lVal = (long)i;COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:COleVariant v3 = "字符串", v4 = (long)1999;CString str =(BSTR)v3.pbstrVal;long i = v4.lVal;七、其它对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:LPARAM lParam;WORD loValue = LOWORD(lParam);///取低16位WORD hiValue = HIWORD(lParam);///取高16位对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:WORD wValue;BYTE loValue = LOBYTE(wValue);///取低8位BYTE hiValue = HIBYTE(wValue);///取高8位后记:本文匆匆写成,错误之处在所难免,欢迎来信指正。
int ->str itoa,atoidouble- str ftoa,atof_bstr_t,_variant_t,CString,long 等等看看下面:我给你点详细的例子,看下面先看懂_variant_t与_bstr_t这两个类的构造函数和 operator=里面有重载了很多情况,其他类型向_variant_t 赋值:_variant_t( ) throw( );_variant_t( const VARIANT& varSrc ) throw( _com_error );_variant_t( const VARIANT* pVarSrc ) throw( _com_error );_variant_t( const _variant_t& var_t_Src ) throw( _com_error );_variant_t( VARIANT& varSrc, bool fCopy ) throw( _com_error );_variant_t( short sSrc, VARTYPE vtSrc = VT_I2 ) throw( _com_error ); _variant_t( long lSrc, VARTYPE vtSrc = VT_I4 ) throw( _com_error ); _variant_t( float fltSrc ) throw( );_variant_t( double dblSrc, VARTYPE vtSrc = VT_R8 ) throw( _com_error ); _variant_t( const CY& cySrc ) throw( );_variant_t( const _bstr_t& bstrSrc ) throw( _com_error );_variant_t( const wchar_t *wstrSrc ) throw( _com_error );_variant_t( const char* strSrc ) throw( _com_error );_variant_t( bool bSrc ) throw( );_variant_t( IUnknown* pIUknownSrc, bool fAddRef = true ) throw( );_variant_t( IDispatch* pDispSrc, bool fAddRef = true ) throw( );_variant_t( const DECIMAL& decSrc ) throw( );_variant_t( BYTE bSrc ) throw( );operator=的重载形式:_variant_t& operator=( const VARIANT& varSrc ) throw( _com_error ); _variant_t& operator=( const VARIANT* pVarSrc ) throw( _com_error ); _variant_t& operator=( const _variant_t& var_t_Src ) throw( _com_error ); _variant_t& operator=( short sSrc ) throw( _com_error );_variant_t& operator=( long lSrc ) throw( _com_error );_variant_t& operator=( float fltSrc ) throw( _com_error );_variant_t& operator=( double dblSrc ) throw( _com_error );_variant_t& operator=( const CY& cySrc ) throw( _com_error );_variant_t& operator=( const _bstr_t& bstrSrc ) throw( _com_error ); _variant_t& operator=( const wchar_t* wstrSrc ) throw( _com_error ); _variant_t& operator=( const char* strSrc ) throw( _com_error );_variant_t& operator=( IDispatch* pDispSrc ) throw( _com_error );_variant_t& operator=( bool bSrc ) throw( _com_error );_variant_t& operator=( IUnknown* pSrc ) throw( _com_error );_variant_t& operator=( const DECIMAL& decSrc ) throw( _com_error ); _variant_t& operator=( BYTE bSrc ) throw( _com_error );有了以上两个函数,举个例子:double f=1.0_variant_t v;v=f; //是合法的看看operator=的重载形式就知道了CString str="ddd"_variant_t v;v=str.AllocSysString() 或者v=(_bstr_t)(char*)str;即可_variant_t转换成别的形式你首先必须确定你要转化成什么样的形式double f;_variant_t vf=v.dblVal 即可或者f=(double)v;也可以附:_variant_t的操作符operator short( ) const throw( _com_error ); operator long( ) const throw( _com_error); operator float( ) const throw( _com_error ); operator double( ) const throw( _com_error ); operator CY( ) const throw( _com_error ); operator bool( ) const throw( _com_error ); operator DECIMAL( ) const throw( _com_error ); operator BYTE( ) const throw( _com_error ); operator _bstr_t( ) const throw( _com_error ); operator IDispatch*( ) const throw( _com_error ); operator IUnknown*( ) const throw( _com_error );二:CString->TCHAR*的转化可以用函数GetBuff()函数原型为:LPTSTR GetBuffer( int nMinBufLength ); CString str("CString");TCHAR* szMsg = new TCHAR[100];//其参数为CString字符串的长度szMsg = str.GetBuffer(str.GetLength());str.ReleaseBuffer();delete []szMsg;szMsg = NULL;TCHAR*->CString的转化TCHAR szTchar[18] = L"TCHAR";CString str;str.Format(_T("%s"),szTchar);CString和string的互相转换CString->std::string 例子:CString strMfc="test";std::string strStl;strStl=strMfc.GetBuffer(0);std::string->CString 例子:CString strMfc;std::string strStl="test";strMfc=strStl.c_str();对有关数据类型转换的整理int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="程佩君";char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串∙短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换∙长整型(long)ltoa(l,temp,10);∙浮点数(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: 0decimal表示小数点的位置,sign表示符号:0为正数,1为负数∙CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str;∙BSTR变量BSTR bstrValue = ::SysAllocString(L"程序员");char * buf = _com_util::ConvertBSTRToString(bstrValue);SysFreeString(bstrValue);AfxMessageBox(buf);delete(buf);∙CComBSTR变量CComBSTR bstrVar("test");char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);AfxMessageBox(buf);delete(buf);∙_bstr_t变量_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用_bstr_t bstrVar("test");const char *buf = bstrVar;///不要修改buf中的内容AfxMessageBox(buf);∙通用方法(针对非COM数据类型)用sprintf完成转换∙char buffer[200]; char c = '1'; int i = 35; long j = 1000; floatf = 1.7320534f; sprintf( buffer, "%c",c); sprintf( buffer, "%d",i);sprintf( buffer, "%d",j); sprintf( buffer, "%f",f);二、字符串转换为其它数据类型strcpy(temp,"123");∙短整型(int)i = atoi(temp);∙长整型(long)l = atol(temp);∙浮点(double)d = atof(temp);∙CString变量CString name = temp;∙BSTR变量BSTR bstrValue = ::SysAllocString(L"程序员");...///完成对bstrValue的使用SysFreeString(bstrValue);∙CComBSTR变量CComBSTR类型变量可以直接赋值CComBSTR bstrVar1("test");CComBSTR bstrVar2(temp);∙_bstr_t变量_bstr_t类型的变量可以直接赋值_bstr_t bstrVar1("test");_bstr_t bstrVar2(temp);三、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:∙整数(int)str.Format("%d",i);∙浮点数(float)str.Format("%f",i);∙字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值str = username;∙对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char *,然后赋值给CString变量。