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 );
     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中,定义了两个诊断宏 SUCCEEDEDFAILED用来诊断 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 );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值