VC++常用数据类型及其操作详解.docx

上传人:b****5 文档编号:12542156 上传时间:2023-04-20 格式:DOCX 页数:20 大小:20.59KB
下载 相关 举报
VC++常用数据类型及其操作详解.docx_第1页
第1页 / 共20页
VC++常用数据类型及其操作详解.docx_第2页
第2页 / 共20页
VC++常用数据类型及其操作详解.docx_第3页
第3页 / 共20页
VC++常用数据类型及其操作详解.docx_第4页
第4页 / 共20页
VC++常用数据类型及其操作详解.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

VC++常用数据类型及其操作详解.docx

《VC++常用数据类型及其操作详解.docx》由会员分享,可在线阅读,更多相关《VC++常用数据类型及其操作详解.docx(20页珍藏版)》请在冰豆网上搜索。

VC++常用数据类型及其操作详解.docx

VC++常用数据类型及其操作详解

VC++常用数据类型及其操作详解

目录

一.             VC常用数据类型列表

二.             常用数据类型转化

2.1数学类型变量与字符串相互转换

2.2CString及string,char*与其他数据类型的转换和操作

●CString,string,char*的综合比较

●数学类型与CString相互转化

●CString与char*相互转换举例

●CString与BSTR型转换

●VARIANT型转化成CString型

2.3BSTR、_bstr_t与CComBSTR

2.4VARIANT、_variant_t与COleVariant

                            一.VC常用数据类型列表

 

 

 Type

 DefaultSize

 Description

 

 

 

 

 

[基础类型全是小写]

 

 说明:

这些基础数据类型对于MFC还是API都是被支持的

 

boolean

 unsigned8bit,

 取值TRUE/FALSE

 

byte

 unsigned8bit,

 整数,输出按字符输出

 

char

 unsigned8bit,

 字符

 

double

 signed64bit

 浮点型

 

float

 signed32bit

 浮点型

 

handle_t

  

 Primitivehandletype

 

hyper

 signed64bit

 整型

 

int

 signed32bit

 整型

 

long

 signed32bit

 整型

 

short

 signed16bit

 整型

 

small

 signed8bit

 整型

 

void*

 32-bit

 指向未知类型的指针

 

wchar_t

 unsigned16bit

 16位字符,比char可容纳更多的字符

 

 

  

  

 

[Win32API常用数据类型全大写]

 说明:

这些Win32API支持的简单数据类型主要是用来定义函数返回值,消息参数,结构成员。

这类数据类型大致可以分为五大类:

字符型、布尔型、整型、指针型和句柄型(?

).总共大概有100多种不同的类型, 

 

BOOL/BOOLEAN

 8bit,TRUE/FALSE

 布尔型

 

BYTE

 unsigned8bit

  

 

BSTR

CComBSTR

_bstr_t

 32bit

 BSTR是指向字符串的32位指针

是对BSTR的封装

是对BSTR的封装

 

CHAR

 8bit

 (ANSI)字符类型

 

COLORREF

 32bit

 RGB颜色值整型

 

DWORD

 unsigned32bit

 整型

 

FLOAT

 float型

 float型

 

HANDLE

  

 Object句柄

 

HBITMAP

  

 bitmap句柄

 

HBRUSH

  

 brush句柄

 

HCURSOR

  

 cursor句柄

 

HDC

  

 设备上下文句柄

 

HFILE

  

 OpenFile打开的File句柄

 

HFONT

  

 font句柄

 

HHOOK

  

 hook句柄

 

HKEY

  

 注册表键句柄

 

HPEN

  

 pen句柄

 

HWND

  

 window句柄

 

INT

 --------

 --------

 

LONG

 --------

 ---------

 

LONGLONG

  

 64位带符号整型

 

LPARAM

 32bit 

 消息参数

 

LPBOOL

  

 BOOL型指针

 

LPBYTE

  

 BYTE型指针

 

LPCOLOREF

  

 COLORREF型指针

 

LPCSTR/LPSTR/PCSTR

  

 指向8位(ANSI)字符串类型指针

 

LPCWSTR/LPWSTR/PCWSTR

  

 指向16位Unicode字符串类型

 

LPCTSTR/LPTSTR/PCTSTR

  

 指向一8位或16位字符串类型指针

 

LPVOID

  

 指向一个未指定类型的32位指针

 

LPDWORD

  

 指向一个DWORD型指针

 

其他相似类型:

LPHANDLE、LPINT、LPLONG、LPWORD、LPRESULT

PBOOL、PBOOLEAN、PBYTE、PCHAR、PDWORD、PFLOAT、PHANDLE、PINT、PLONG、PSHORT……

说明:

(1)在16位系统中LP为16bit,P为8bit,在32位系统中都是32bit(此时等价)

(2)LPCSTR等中的C指Const,T表示TCHAR模式即可以工作在ANSI下也可UNICODE

 

SHORT

 usigned

 整型

 

其他UCHAR、UINT、ULONG、ULONGLONG、USHORT为无符号相应类型

 

TBYTE

  

 WCHAR型或者CHAR型

 

TCHAR

  

 ANSI与unicode均可

 

VARIANT

_variant_t

COleVariant

  

 一个结构体参考OAIDL.H

_variant_t是VARIANT的封装类

COleVariant也是VARIANT的封装类

 

 

  

  

 

 

  

  

 

WNDPROC

  

 指向一个窗口过程的32位指针

 

WCHAR

  

 16位Unicode字符型

 

WORD

  

 16位无符号整型

 

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);

cout<

类似函数列表:

_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);

cout<

类似的函数列表:

_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的文章

<>写的很详细,请大家在仔细阅读他的文章.

地址:

或参考附录:

(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=.....;//whatever

BSTRbStr=str.AllocSysString();

 

BSTR型转换为CString

如果你在UNICODE模式下编译代码,你可以简单地写成:

CStringconvert(BSTRbStr)

{

   if(bStr==NULL)

       returnCString(_T(""));

   CStrings(bStr);//inUNICODEmode

   returns;

}

如果是ANSI模式

CStringconvert(BSTRb)

{

   CStrings;

   if(b==NULL)

      returns;//emptyforNULLBSTR

#ifdefUNICODE

   s=b;

#else

   LPSTRp=s.GetBuffer(SysStringLen(b)+1); 

   :

:

WideCharToMultiByte(CP_ACP,           //ANSICodePage

                         0,                //noflags

                         b,                //sourcewidecharstring

                         -1,               //assumeNUL-terminated

                         p,                //targetbuffer

                         SysStringLen(b)+1,//targetbufferlength

                         NULL,             //usesystemdefaultchar

                         NULL);            //don''tcareifdefaultused

   s.ReleaseBuffer();

#endif

   returns;

}

 

●VARIANT型转化成CString型

VARIANT类型经常用来给COM对象传递参数,或者接收从COM对象返回的值。

你也能自己编写返回VARIANT类型的方法,函数返回什么类型依赖可能(并且常常)方法的输入参数(比如,在自动化操作中,依赖与你调用哪个方法。

IDispatch:

:

Invoke可能返回(通过其一个参数)一个包含有BYTE、WORD、float、double、date、BSTR等等VARIANT类型的结果,(详见MSDN上的VARIANT结构的定义)。

在下面的例子中,假设类型是一个BSTR的变体,也就是说在串中的值是通过bsrtVal来引用,其优点是在ANSI应用中,有一个构造函数会把LPCWCHAR引用的值转换为一个CString(见BSTR-to-CString部分)。

在Unicode模式中,将成为标准的CString构造函数,参见对缺省:

:

WideCharToMultiByte转换的告诫,以及你觉得是否可以接受(大多数情况下,你会满意的)。

VARIANTvaData;

vaData=m_com.YourMethodHere();

ASSERT(vaData.vt==VT_BSTR);

CStringstrData(vaData.bstrVal);

你还可以根据vt域的不同来建立更通用的转换例程。

为此你可能会考虑:

CStringVariantToString(VARIANT*va)

{

   CStrings;

   switch(va->vt)

     {/*vt*/

      caseVT_BSTR:

         returnCString(vaData->bstrVal);

      caseVT_BSTR|VT_BYREF:

         returnCString(*vaData->pbstrVal);

      caseVT_I4:

         s.Format(_T("%d"),va->lVal);

         returns;

      caseVT_I4|VT_BYREF:

         s.Format(_T("%d"),*va->plVal);

      caseVT_R8:

         s.Format(_T("%f"),va->dblVal);

         returns;

      ...剩下的类型转换由读者自己完成

      default:

         ASSERT(FALSE);//unknownVARIANTtype(thisASSERTisoptional)

         returnCString("");

     }/*vt*/

}

 

2.3BSTR、_bstr_t与CComBSTR 

CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。

 

char*转换到BSTR可以这样:

 

BSTRb=_com_util:

:

ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h 

反之可以使用char*p=_com_util:

:

ConvertBSTRToString(b);

2.4(引)VARIANT、_variant_t与COleVariant 

VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。

 

对于VARIANT变量的赋值:

首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:

 

VARIANTva; 

inta=2001; 

va.vt=VT_I4;///指明整型数据 

va.lVal=a;///赋值 

对于不马上赋值的VARIANT,最好先用VoidVariantInit(VARIANTARGFAR*pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:

 

unsignedcharbVal;VT_UI1 

shortiVal;VT_I2 

longlVal;VT_I4 

floatfltVal;VT_R4 

doubledblVal;VT_R8 

VARIANT_BOOLboolVal;VT_BOOL 

SCODEscode;VT_ERROR 

CYcyVal;VT_CY 

DATEdate;VT_DATE 

BSTRbstrVal;VT_BSTR 

IUnknownFAR*punkVal;VT_UNKNOWN 

IDispatchFAR*pdispVal;VT_DISPATCH 

SAFEARRAYFAR*parray;VT_ARRAY|* 

unsignedcharFAR*pbVal;VT_BYREF|VT_UI1 

shortFAR*piVal;VT_BYREF|VT_I2 

longFAR*plVal;VT_BYREF|VT_I4 

floatFAR*pfltVal;VT_BYREF|VT_R4 

doubleFAR*pdblVal;VT_BYREF|VT_R8 

VARIANT_BOOLFAR*pboolVal;VT_BYREF|VT_BOOL 

SCODEFAR*pscode;VT_BYREF|VT_ERROR 

CYFAR*pcyVal;VT_BYREF|VT_CY 

DATEFAR*pdate;VT_BYREF|VT_DATE 

BSTRFAR*pbstrVal;VT_BYREF|VT_BSTR 

IUnknownFAR*FAR*ppunkVal;VT_BYREF|VT_UNKNOWN 

IDispatchFAR*FAR*ppdispVal;VT_BYREF|VT_DISPATCH 

SAFEARRAYFAR*FAR*pparray;VT_ARRAY|* 

VARIANTFAR*pvarVal

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1