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中,定义了两个诊断宏
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)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示转换方式
itoa(i,temp,2); ///按二进制方式转换
长整型(long)
long l = 2001;
char temp[200];
ltoa(l,temp,10);
ltoa(l,temp,10);
(2)字符型转换为整型
char temp[200] = "123";
短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
d = atof(temp);
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
);