类似的函数列表:
_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