ATL中常见数据类型及其相互转换
ATL 中常见数据类型及其相互转换
1 、 BSTR 类型:
BSTR类型的定义如下:
typedef  OLECHAR *  BSTR ;
在32位 windows平台下为宽字符( double-byte (Unicode) strings),在Apple Mac平台下为单字符( single-byte strings),⼀个 BSTR 由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌⼊的 null 值。其常见的操作函数如下:
(1)⽐较两个字符串:
int bstrcmp(const BSTR bstr1, const BSTR bstr2);
int bstrncmp(const BSTR bstr1 , const BSTR bstr2, int cChars);
int bstrcmpi(const BSTR bstr1 , const BSTR bstr2);
int bstrncmpi(const BSTR bstr1 , const BSTR bstr2, int cChars);
(2)获得字符串的长度:
int bstrlen(const BSTR bstr);
(3)字符串的拷贝:
BSTR bstrcpy(BSTR& bstrDst, const BSTR bstrSrc);
BSTR bstrncpy(BSTR & bstrDst, const BSTR bstrSrc, int cChars);
(4)字符串空间的分配:
BSTR bstralloc(const BSTR bstr);
BSTR bstralloc(const char *sz );
unicode文件格式BSTR bstralloc(const WCHAR *wsz);
注意:⽤ bstralloc分配的内存空间,需要⽤ SysFreeString来释放。
2 、 HRSULT 类型:
HRESULT类型的定义如下:
typedef LONG        HRESULT;
该类型为⼀个32位的值,其主要⽤来描述错误和警告信息。
其组成的区域如下:
第1位:标志返回值是否成功;0代表成功,1代表失败。
第2 - 5位:为保留字段。
第6 - 16位:指⽰错误和警告消息。
第17 - 32位:描述错误和警告信息。
因此,我们在判断函数的调⽤(返回值为 HRESULT类型)是否成功时,只需要得知它的第⼀位是否为0;作为⼀个 LONG类型来讲,即只需判断该值是否⼤于0。
为了使⽤的⽅便,在 WINERROR.H中,定义了两个诊断宏 SUCCEEDED与 FAILED⽤来诊断 HRESULT值,其定义如下:
#define SUCCEEDED(Status)  ((HRESULT)(Status) >= 0)
#define FAILED(Status)  ((HRESULT)(Status)<0)
3 、常见类型之间的转换:
(1)整型数据类型转换为字符型 :
短整型(int) :
int i = 100;
char temp[200];
itoa(i,temp,10);///将i转换为字符串放⼊temp中,最后⼀个数字表⽰转换⽅式
itoa(i,temp,2); ///按⼆进制⽅式转换
长整型(long)
long l = 2001;
char temp[200];
ltoa(l,temp,10);
(2)字符型转换为整型
char temp[200] = "123";
短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
d = atof(temp);
(3) BSTR类型转换为 LPTSTR :
LPTSTR pStr = NULL ;
BSTR bstrFileName = SysAllocString;(“poty”);
_bstr_t _bstrFileName bstrFileName, false);
pStr = (char * )_bstrFileName;
4 、常见字符串操作函数:
(1)追加⼀个新的字符串:
char *strcat( char * strDestination , const char * strSource );
(2)在字符串中查⼀个字符:
char *strchr( const char * string , int c ); // 返回字符串中第⼀个出现的 c
char *strrchr( const char * string , int c ); // 返回字符串中最后⼀个出现的 c (3)在字符串中查⼀个字符串:
char *strstr( const char * string , const char * strCharSet );
size_t strspn( const char * string , const char * strCharSet );
(4)字符串拷贝:
char *strcpy( char * strDestination , const char * strSource );

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。