您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > VC++常用数据类型及其操作详解
VC++常用数据类型及其操作详解一.VC常用数据类型列表二.常用数据类型转化2.1数学类型变量与字符串相互转换2.2CString及string,char*与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString与BSTR型转换●VARIANT型转化成CString型2.3BSTR、_bstr_t与CComBSTR2.4VARIANT、_variant_t与COleVariant附录CString及字符串转及操作详解参考书籍:CSDN,MFC深入浅出(SecondEdit)一.VC常用数据类型列表TypeDefaultSizeDescription基础类型全是小写说明:这些基础数据类型对于MFC还是API都是被支持的booleanunsigned8bit,取值TRUE/FALSEbyteunsigned8bit,整数,输出按字符输出charunsigned8bit,字符doublesigned64bit浮点型floatsigned32bit浮点型handle_tPrimitivehandletypehypersigned64bit整型intsigned32bit整型longsigned32bit整型shortsigned16bit整型smallsigned8bit整型void*32-bit指向未知类型的指针wchar_tunsigned16bit16位字符,比char可容纳更多的字符Win32API常用数据类型全大写说明:这些Win32API支持的简单数据类型主要是用来定义函数返回值,消息参数,结构成员。这类数据类型大致可以分为五大类:字符型、布尔型、整型、指针型和句柄型(?).总共大概有100多种不同的类型BOOL/BOOLEAN8bit,TRUE/FALSE布尔型BYTEunsigned8bitBSTRCComBSTR_bstr_t32bitBSTR是指向字符串的32位指针是对BSTR的封装是对BSTR的封装CHAR8bit(ANSI)字符类型COLORREF32bitRGB颜色值整型DWORDunsigned32bit整型FLOATfloat型float型HANDLEObject句柄HBITMAPbitmap句柄HBRUSHbrush句柄HCURSORcursor句柄HDC设备上下文句柄HFILEOpenFile打开的File句柄HFONTfont句柄HHOOKhook句柄HKEY注册表键句柄HPENpen句柄HWNDwindow句柄INT----------------LONG-----------------LONGLONG64位带符号整型LPARAM32bit消息参数LPBOOLBOOL型指针LPBYTEBYTE型指针LPCOLOREFCOLORREF型指针LPCSTR/LPSTR/PCSTR指向8位(ANSI)字符串类型指针LPCWSTR/LPWSTR/PCWSTR指向16位Unicode字符串类型LPCTSTR/LPTSTR/PCTSTR指向一8位或16位字符串类型指针LPVOID指向一个未指定类型的32位指针LPDWORD指向一个DWORD型指针其他相似类型:LPHANDLE、LPINT、LPLONG、LPWORD、LPRESULTPBOOL、PBOOLEAN、PBYTE、PCHAR、PDWORD、PFLOAT、PHANDLE、PINT、PLONG、PSHORT……说明:(1)在16位系统中LP为16bit,P为8bit,在32位系统中都是32bit(此时等价)(2)LPCSTR等中的C指Const,T表示TCHAR模式即可以工作在ANSI下也可UNICODESHORTusigned整型其他UCHAR、UINT、ULONG、ULONGLONG、USHORT为无符号相应类型TBYTEWCHAR型或者CHAR型TCHARANSI与unicode均可VARIANT_variant_tCOleVariant一个结构体参考OAIDL.H_variant_t是VARIANT的封装类COleVariant也是VARIANT的封装类WNDPROC指向一个窗口过程的32位指针WCHAR16位Unicode字符型WORD16位无符号整型WPARAM消息参数MFC独有数据类型下面两个数据类型是微软基础类库中独有的数据类型POSITION标记集合中一个元素的位置的值,被MFC中的集合类所使用LPCRECT指向一个RECT结构体常量(不能修改)的32位指针CString其实是MFC中的一个类说明:(1)-------表示省略(2)1Byte=8Bit,字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节,64位中1字=8字节.不要搞混这些概念.二.常用数据类型转化及操作2.1数学类型变量与字符串相互转换(这些函数都在STDLIB.H里)(1)将数学类型转换为字符串可以用以下一些函数:举例:_CRTIMPchar*__cdecl_itoa(int,char*,int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制如以下程序:intiTyep=3;char*szChar;itoa(iType,szChar,2);coutszChar;//输出为1010类似函数列表:_CRTIMPchar*__cdecl_itoa(int,char*,int);//为了完整性,也列在其中_CRTIMPchar*__cdecl_ultoa(unsignedlong,char*,int);_CRTIMPchar*__cdecl_ltoa(long,char*,int);_CRTIMPchar*__cdecl_i64toa(__int64,char*,int);_CRTIMPchar*__cdecl_ui64toa(unsigned__int64,char*,int);_CRTIMPwchar_t*__cdecl_i64tow(__int64,wchar_t*,int);_CRTIMPwchar_t*__cdecl_ui64tow(unsigned__int64,wchar_t*,int);_CRTIMPwchar_t*__cdecl_itow(int,wchar_t*,int);//转换为长字符串类型_CRTIMPwchar_t*__cdecl_ltow(long,wchar_t*,int);_CRTIMPwchar_t*__cdecl_ultow(unsignedlong,wchar_t*,int);还有很多,请自行研究(2)将字符串类型转换为数学类型变量可以用以下一些函数:举例:_CRTIMPint__cdeclatoi(constchar*);//参数一看就很明了char*szChar=”88”;inttemp(0);temp=atoi(szChar);couttemp;类似的函数列表:_CRTIMPint__cdeclatoi(constchar*);_CRTIMPdouble__cdeclatof(constchar*);_CRTIMPlong__cdeclatol(constchar*);_CRTIMPlongdouble__cdecl_atold(constchar*);_CRTIMP__int64__cdecl_atoi64(constchar*);_CRTIMPdouble__cdeclstrtod(constchar*,char**);//_CRTIMPlong__cdeclstrtol(constchar*,char**,int);//_CRTIMPlongdouble__cdecl_strtold(constchar*,char**);_CRTIMPunsignedlong__cdeclstrtoul(constchar*,char**,int);_CRTIMPdouble__cdeclwcstod(constwchar_t*,wchar_t**);//长字符串类型转换为数学类型_CRTIMPlong__cdeclwcstol(constwchar_t*,wchar_t**,int);_CRTIMPunsignedlong__cdeclwcstoul(constwchar_t*,wchar_t**,int);_CRTIMPint__cdecl_wtoi(constwchar_t*);_CRTIMPlong__cdecl_wtol(constwchar_t*);_CRTIMP__int64__cdecl_wtoi64(constwchar_t*);还有很多,请自行研究2.2.CString及string,char*与其他数据类型的转换和操作(1)CString,string,char*的综合比较(这部分CSDN上的作者joise的文章CString,string,char*的综合比较写的很详细,请大家在仔细阅读他的文章.地址:或参考附录:(2)转换:●数学类型与CString相互转化数学类型转化为CString可用Format函数,举例:CStrings;inti=64;s.Format(%d,i)CString转换为数学类型:举例CStringstrValue(1.234);doubledblValue;dblValue=atof((LPCTSTR)strValue);●CString与char*相互转换举例CStringstrValue(“Hello”);char*szValue;szValue=strValue.GetBuffer(szValue);也可用(LPSTR)(LPCTSTR)对CString//进行强制转换.szValue=(LPSTR)(LPCTSTR)strValue;反过来可直接赋值:char*szChar=NULL;CStringstrValue;szChar=newchar[10];memset(szChar,0,10);strcpy(szChar,”Hello”);strValue=szChar;●CString与BSTR型转换CString型转化成BSTR型当我们使用ActiveX控件编程时,经常需要用到将某个值表示成BSTR类型.BSTR是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的NULL字符。可以调用CString对象的AllocSysString方法将CString转化成BSTR:CStringstr;str=.....;//whateverBSTRbStr=str.AllocSysString();BSTR型转换为CString如果你在UNICODE模式下编译代码,你可以简单地写成:CStringconvert(BSTRbStr){if(bStr==NULL)returnCString(_T());CStrings(bStr);//inUNICODEmodereturns;}如果是ANSI模式CStringconvert(BSTRb){CStrings;if(b==NULL)returns;//emptyforNULLBSTR#ifdefUNICODEs=b;#elseLPSTRp=s.GetBuffer(SysStringLen(b)+1);::WideCharToMultiByte(CP_ACP,//ANSICodePage0,//noflagsb,//sourcewidecharstring-1,//assumeNUL-terminatedp,//targetbufferSysStringLen(b)+1,//targetbufferlengthNULL,//usesystemdefaultcharNULL);//don''tcareifdefaultuseds.ReleaseBuff
本文标题:VC++常用数据类型及其操作详解
链接地址:https://www.777doc.com/doc-6327153 .html