VC++中常用数据类型及操作.docx
- 文档编号:9439346
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:20
- 大小:25.86KB
VC++中常用数据类型及操作.docx
《VC++中常用数据类型及操作.docx》由会员分享,可在线阅读,更多相关《VC++中常用数据类型及操作.docx(20页珍藏版)》请在冰豆网上搜索。
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
附录CString及字符串转及操作详解
参考书籍:
CSDN,<
一.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可容纳更多的字符
Win32
API
常
用
数
据
类
型
全
大
写
说明:
这些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;VT_BYREF|VT_VARIANT voidFAR*byref;VT_BYREF _variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。 例如: longl=222; ingi=100; _variant_tlVal(l); lVal=(long)i; COleVariant的使用与_variant_t的方法基本一样,请参考如下例子: COleVariantv3="字符串",v4=(long)1999; CStringstr=(BSTR)v3.pbstrVal; longi=v4.lVal; VC++.NET中字符串之间的转换 一、BSTR、LPSTR和LPWSTR 在VisualC++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。 之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。 那么什么是BSTR、LPSTR以及LPWSTR呢? BSTR(BasicSTRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。 它被描述成一个与自动化相兼容的类型。 由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。 图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。 LPSTR和LP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 常用 数据类型 操作