介绍一些
常用数据类型的使用。先定义一些常见类型变量借以说明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="张 三 ";
char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2;
一、其它数据类型转换为字符串
?
短 整 型 (int) itoa(i,temp,10);///将 i 转 换 为 字 符 串 放 入 temp 中 ,最 后 一 个 数 字 表 示 十进制 itoa(i,temp,2); ///按 二 进 制 方 式 转 换
?
长 整 型 (long) ltoa(l,temp,10);
?
浮 点 数 (float,double) 用 fcvt 可 以 完 成 转 换 ,这 是 MSDN 中 的 例 子 : int decimal, sign; char *buffer; double source = 3.1415926535; buffer = _fcvt( source, 7, &;decimal, &;sign );
运 行 结 果 :source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 decimal 表 示 小 数 点 的 位 置 ,sign 表 示 符 号 :0 为 正 数 , 1 为 负 数
?
CString 变 量 str = "2008 北 京 奥 运 "; buf = (LPSTR)(LPCTSTR)str;
?
BSTR 变 量 BSTR bstrValue = ::SysAllocString(L"程 序 员 "); char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue); AfxMessageBox(buf); delete(buf);
?
CComBSTR 变 量 CComBSTR bstrVar("test"); char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); AfxMessageBox(buf); delete(buf);
?
_bstr_t 变 量 _bstr_t 类 型 是 对 BSTR 的 封 装 ,因 为 已 经 重 载 了 =操 作 符 ,所 以 很 容 易 使 用 _bstr_t bstrVar("test"); const char *buf = bstrVar;///不 要 修 改 buf 中 的 内 容 AfxMessageBox(buf);
?
通 用 方 法 (针 对 非 COM 数 据 类 型 ) 用 sprintf 完 成 转 换
? ? ? ?
char char int long
buffer[200]; c = '1'; i = 35; j = 1000;
? ? ? ? ?
float f = 1.7320534f; sprintf( buffer, "%c",c); sprintf( buffer, "%d",i); sprintf( buffer, "%d",j); sprintf( buffer, "%f",f);
二、字符串转换为其它数据类型 strcpy(temp,"123");
?
短 整 型 (int) i = atoi(temp);
?
长 整 型 (long) l = atol(temp);
?
浮 点 (double) d = atof(temp);
?
CString 变 量 CString name = temp;
?
BSTR 变 量 BSTR bstrValue = ::SysAllocString(L"程 序 员 "); ...///完 成 对 bstrValue 的 使 用 SysFreeString(bstrValue);
?
CComBSTR 变 量 CComBSTR 类 型 变 量 可 以 直 接 赋 值 CComBSTR bstrVar1("test"); CComBSTR bstrVar2(temp);
?
_bstr_t 变 量 _bstr_t 类 型 的 变 量 可 以 直 接 赋 值 _bstr_t bstrVar1("test"); _bstr_t bstrVar2(temp);
三 、 其 它 数 据 类 型 转 换 到 CString 使 用 CString 的 成 员 函 数 Format 来 转 换 ,例 如 :
?
整 数 (int) str.Format("%d",i);
?
浮 点 数 (float) str.Format("%f",i);
?
字 符 串 指 针 (char *)等 已 经 被 CString 构 造 函 数 支 持 的 数 据 类 型 可 以 直 接 赋值 str = username;
?
对 于 Format 所 不 支 持 的 数 据 类 型 , 可 以 通 过 上 面 所 说 的 关 于 其 它 数 据 类 型 转 化 到 char *的 方 法 先 转 到 char
*, 然 后 赋 值 给 CString 变 量 。
BSTR、 四 、 BSTR 、 _bstr_t 与 CComBSTR
?
CComBSTR 是 ATL 对 BSTR 的 封 装 ,_bstr_t 是 C++对 BSTR 的 封 装 ,BSTR 是 32 位 指 针 ,但 并 不 直 接 指 向 字 串 的 缓 冲 区 。 char *转 换 到 BSTR 可 以 这 样 : BSTR b=_com_util::ConvertStringToBSTR("数 据 ");///使 用 前 需 要 加 上 comutil.h 和 comsupp.lib SysFreeString(bstrValue); 反之可以使用 char *p=_com_util::ConvertBSTRToString(b); delete p; 具体可以参考一,二段落里的具体说明。
CComBSTR 与 _bstr_t 对 大 量 的 操 作 符 进 行 了 重 载 , 可 以 直 接 进 行 =,!=,== 等操作,所以使用非常方便。 特 别 是 _bstr_t,建 议 大 家 使 用 它 。
五 、 VARIANT 、 _variant_t 与 COleVariant
?
VARIANT 的 结 构 可 以 参 考 头 文 件 VC98\Include\OAIDL.H 中 关 于 结 构 体 tagVARIANT 的 定 义 。 对 于 VARIANT 变 量 的 赋 值 : 首 先 给 vt 成 员 赋 值 , 指 明 数 据 类 型 , 再 对 联 合结构中相同数据类型的变量赋值,举个例子: VARIANT va; int a=2001; va.vt=VT_I4;///指 明 整 型 数 据 va.lVal=a; ///赋 值
对 于 不 马 上 赋 值 的 VARIANT, 最 好