VC++中数据类型转换大全.docx

上传人:b****1 文档编号:3317627 上传时间:2023-05-05 格式:DOCX 页数:18 大小:26.52KB
下载 相关 举报
VC++中数据类型转换大全.docx_第1页
第1页 / 共18页
VC++中数据类型转换大全.docx_第2页
第2页 / 共18页
VC++中数据类型转换大全.docx_第3页
第3页 / 共18页
VC++中数据类型转换大全.docx_第4页
第4页 / 共18页
VC++中数据类型转换大全.docx_第5页
第5页 / 共18页
VC++中数据类型转换大全.docx_第6页
第6页 / 共18页
VC++中数据类型转换大全.docx_第7页
第7页 / 共18页
VC++中数据类型转换大全.docx_第8页
第8页 / 共18页
VC++中数据类型转换大全.docx_第9页
第9页 / 共18页
VC++中数据类型转换大全.docx_第10页
第10页 / 共18页
VC++中数据类型转换大全.docx_第11页
第11页 / 共18页
VC++中数据类型转换大全.docx_第12页
第12页 / 共18页
VC++中数据类型转换大全.docx_第13页
第13页 / 共18页
VC++中数据类型转换大全.docx_第14页
第14页 / 共18页
VC++中数据类型转换大全.docx_第15页
第15页 / 共18页
VC++中数据类型转换大全.docx_第16页
第16页 / 共18页
VC++中数据类型转换大全.docx_第17页
第17页 / 共18页
VC++中数据类型转换大全.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VC++中数据类型转换大全.docx

《VC++中数据类型转换大全.docx》由会员分享,可在线阅读,更多相关《VC++中数据类型转换大全.docx(18页珍藏版)》请在冰点文库上搜索。

VC++中数据类型转换大全.docx

VC++中数据类型转换大全

vc数据类型转换大全(转载)

inti=100;

longl=2001;

floatf=300.2;

doubled=12345.119;

charusername[]=”程佩君”;

chartemp[200];

char*buf;

CStringstr;

_variant_tv1;

_bstr_tv2;

一、其它数据类型转换为字符串

短整型(int)

itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制

itoa(i,temp,2);///按二进制方式转换

长整型(long)

ltoa(l,temp,10);

浮点数(float,double)

用fcvt可以完成转换,这是MSDN中的例子:

intdecimal,sign;

char*buffer;

doublesource=3.1415926535;

buffer=_fcvt(source,7,&decimal,&sign);

运行结果:

source:

3.1415926535buffer:

‘31415927′decimal:

1

sign:

0

decimal表示小数点的位置,sign表示符号:

0为正数,1为负数

CString变量

str=“2008北京奥运”;

buf=(LPSTR)(LPCTSTR)str;//这个因为buf是个char*变量先把CString变量转换为constchar*类型的再变为char*类型的

上面的CString转换为char*型号的必须经过两次反之的直接赋值就可以

BSTR变量

BSTRbstrValue=:

:

SysAllocString(L”程序员”);

char*buf=_com_util:

:

ConvertBSTRToString(bstrValue);

SysFreeString(bstrValue);

一定注意凡是定义的指针变量一定要用delete显示删除

AfxMessageBox(buf);

delete(buf);

CComBSTR变量

CComBSTRbstrVar(”test”);

char*buf=_com_util:

:

ConvertBSTRToString(bstrVar.m_str);

AfxMessageBox(buf);

delete(buf);

_bstr_t变量

_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用

_bstr_tbstrVar(”test”);

constchar*buf=bstrVar;///不要修改buf中的内容

_bstr_t实际上是个字符指针型的

AfxMessageBox(buf);

通用方法(针对非COM数据类型)

用sprintf完成转换

charbuffer[200];

charc=‘1′;

inti=35;

longj=1000;

floatf=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变量

CStringname=temp;

BSTR变量

BSTRbstrValue=:

:

SysAllocString(L”程序员”);

…///完成对bstrValue的使用

SysFreeString(bstrValue);

CComBSTR变量

CComBSTR类型变量可以直接赋值

CComBSTRbstrVar1(”test”);

CComBSTRbstrVar2(temp);

_bstr_t变量

_bstr_t类型的变量可以直接赋值

_bstr_tbstrVar1(”test”);

_bstr_tbstrVar2(temp);

三、其它数据类型转换到CString

使用CString的成员函数Format来转换,例如:

整数(int)

str.Format(”%d”,i);

浮点数(float)

str.Format(”%f”,i);

字符串指针(char

*)等已经被CString构造函数支持的数据类型可以直接赋值

str=username;

对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char

*的方法先转到char*,然后赋值给CString变量。

四、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);

deletep;

具体可以参考一,二段落里的具体说明。

CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!

=,==等操作,所以使用非常方便。

特别是_bstr_t,建议大家使用它。

五、VARIANT、_variant_t与COleVariant

VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。

对于VARIANT变量的赋值:

首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:

VARIANTva;

inta=2001;

va.vt=VT_I4;///指明整型数据

va.lVal=a;///赋值

对于不马上赋值的VARIANT,最好先用Void

VariantInit(VARIANTARGFAR*

pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:

BytebVal;//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.

DECIMALFAR*pdecVal//VT_BYREF|VT_DECIMAL.

IUnknownFAR*punkVal;//VT_UNKNOWN.

IDispatchFAR*pdispVal;//VT_DISPATCH.

SAFEARRAYFAR*parray;//VT_ARRAY|*.

ByteFAR*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;//VT_BYREF|VT_VARIANT.

voidFAR*byref;//GenericByRef.

charcVal;//VT_I1.

unsignedshortuiVal;//VT_UI2.

unsignedlongulVal;//VT_UI4.

intintVal;//VT_INT.

unsignedintuintVal;//VT_UINT.

charFAR*pcVal;//VT_BYREF|VT_I1.

unsignedshortFAR*puiVal;//VT_BYREF|VT_UI2.

unsignedlongFAR*pulVal;//VT_BYREF|VT_UI4.

intFAR*pintVal;//VT_BYREF|VT_INT.

unsignedintFAR*puintVal;//VT_BYREF|VT_UINT.

_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。

使用时需加上#include

例如:

longl=222;

ingi=100;

_variant_tlVal(l);

lVal=(long)i;

COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:

COleVariantv3=“字符串”,v4=(long)1999;

CStringstr=(BSTR)v3.pbstrVal;

longi=v4.lVal;

六、其它一些COM数据类型

根据ProgID得到CLSID

HRESULTCLSIDFromProgID(LPCOLESTRlpszProgID,LPCLSIDpclsid);

CLSIDclsid;

CLSIDFromProgID(L”MAPI.Folder”,&clsid);

根据CLSID得到ProgID

WINOLEAPIProgIDFromCLSID(REFCLSIDclsid,LPOLESTR*lplpszProgID);

例如我们已经定义了

CLSID_IApplication,下面的代码得到ProgID

LPOLESTRpProgID=0;

ProgIDFromCLSID(CLSID_IApplication,&pProgID);

…///可以使用pProgID

CoTaskMemFree(pProgID);//不要忘记释放

七、ANSI与Unicode

Unicode称为宽字符型字串,COM里使用的都是Unicode字符串。

将ANSI转换到Unicode

(1)通过L这个宏来实现,例如:

CLSIDFromProgID(

L”MAPI.Folder”,&clsid);

(2)通过MultiByteToWideChar函数实现转换,例如:

char*szProgID=“MAPI.Folder”;

WCHARszWideProgID[128];

CLSIDclsid;

longlLen=

MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));

szWideProgID[lLen]=‘\0′;

(3)通过A2W宏来实现,例如:

USES_CONVERSION;

CLSIDFromProgID(A2W(szProgID),&clsid);

将Unicode转换到ANSI

(1)使用WideCharToMultiByte,例如:

//假设已经有了一个Unicode串wszSomeString…

charszANSIString[MAX_PATH];

WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,wszSomeString,-1,

szANSIString,sizeof(szANSIString),NULL,NULL);

(2)使用W2A宏来实现,例如:

USES_CONVERSION;

pTemp=W2A(wszSomeString);

八、其它

对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:

LPARAMlParam;

WORDloValue=LOWORD(lParam);///取低16位

WORDhiValue=HIWORD(lParam);///取高16位

对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:

WORDwValue;

BYTEloValue=LOBYTE(wValue);///取低8位

BYTEhiValue=HIBYTE(wValue);///取高8位

两个16位数据(WORD)合成32位数据(DWORD,LRESULT,LPARAM,或WPARAM)

LONGMAKELONG(WORDwLow,WORDwHigh);

WPARAMMAKEWPARAM(WORDwLow,WORDwHigh);

LPARAMMAKELPARAM(WORDwLow,WORDwHigh);

LRESULTMAKELRESULT(WORDwLow,WORDwHigh);

两个8位的数据(BYTE)合成16位的数据(WORD)

WORDMAKEWORD(BYTEbLow,BYTEbHigh);

从R(red),G(green),B(blue)三色得到COLORREF类型的颜色值

COLORREFRGB(BYTEbyRed,BYTEbyGreen,BYTEbyBlue);

例如COLORREFbkcolor=RGB(0×22,0×98,0×34);

从COLORREF类型的颜色值得到RGB三个颜色值

BYTERed=GetRValue(bkcolor);///得到红颜色

BYTEGreen=GetGValue(bkcolor);///得到绿颜色

BYTEBlue=GetBValue(bkcolor);///得到兰颜色

九、注意事项

假如需要使用到ConvertBSTRToString此类函数,需要加上头文件comutil.h,并在setting中加入comsupp.lib或者直接加上#pragma

comment(lib,“comsupp.lib”)

后记:

本文匆匆写成,错误之处在所难免,欢迎指正.

关于把BSTR类型数据转换成CString类型数据时的问题?

当我在把BSTR类型数据转换成CString或“char*

类型”数据时,发现在BSTR类型字符串较短的情况下没问题,当较长时就会出现

内存读写错了。

(在NT,2000下都测试是这样的。

根据你所说:

1)字符串指针(char

*)等已经被CString构造函数支持的数据类型

可以直接赋值str=username;

2)当b为BSTR类型时可以使用

char*p=_com_util:

:

ConvertBSTRToString(b);

于是以下是对的:

CStringcstr;

BSTRbstr;

….

cstr=com_util:

:

ConvertBSTRToString(bstr);

可是当bstr非常大时(其实,较大时就会)就会出现内存读写错,不知何故。

此外我发现cstr=com_util:

:

ConvertBSTRToString(bstr);

可以简化为cstr=bstr;

但当bstr较大时同样出现这个问题。

请兄弟帮忙!

急。

谢谢!

如何转化((list*)fileip.bian)->liang

关于把CString转化成LPCTSTR的问题作者:

jakiesun

发表日期:

2001-9-520:

08:

48

我记的我以前写过这样一段代码

voidfunction()

{

CStringstr,str1,str2;

function((char*)(LPCTSTR)str1);

str=str1;

…//调试道此发现str2的值随着str的改变而改变,请问能解释一下为什么,如有回答,请通知

wangshaoh...@,tx先

}

添加lib支持作者:

磨刀霍霍发表日期:

2001-9-1011:

32:

12

如果不添加会产生错误,在setting中加入comsupp.lib或者直接#pragma

comment(lib,“comsupp.lib”)

微软认为缺省的设置call

convention如果不设置成__cdecl也会出现同样的错误。

1。

int转成cstring?

回复人:

 caigzhi(caigzhi) (2001-10-1711:

27:

35)得0分

CString的成员函数Format()

inta=2131;

CStringstr;

str.Format(”%d”,a);

回复人:

 tenchi(C与C++之间) (2001-10-1711:

32:

12)得0分

inti=2001;

charstr[10];

_itoa(i,str,10);

CStringszString=str;

回复人:

 fiolin(幽深的水) (2001-10-1711:

45:

40)得0分

他们两个的都可以!

回复人:

 sohucsdnvc(thanks) (2001-10-1713:

24:

17)得0分

那如何把double转成cstring

回复人:

 yihugang(小虎子) (2001-10-1713:

29:

15)得6分

inti=2131;

char*c=newchar[20];

CStringstr;

sprintf(c,’%d’,i);

str=*c;

回复人:

 Gu_c_h(Gu) (2001-10-1714:

07:

17)得0分

用_gcvt下面是msdn的例子

Example

/*_GCVT.C:

Thisprogramconverts-3.1415e5

*toitsstringrepresentation.

*/

#include

#include

voidmain(void)

{

charbuffer[50];

doublesource=-3.1415e5;

_gcvt(source,7,buffer);

printf(“source:

%fbuffer:

‘%s’\n”,source,buffer);

_gcvt(source,7,buffer);

printf(“source:

%ebuffer:

‘%s’\n”,source,buffer);

}

Output

source:

-314150.000000buffer:

‘-314150.’

source:

-3.141500e+005buffer:

‘-314150.’

回复人:

 Gu_c_h(Gu) (2001-10-1714:

49:

56)得6分

inta=-3.1415e5;

CStringstr;

str.Format(”%f”,a);

回复人:

 ruixp(锐剑) (2001-10-1715:

06:

48)得6分

CString的成员函数Format()

inta=2131;

CStringstr;

str.Format(”%d”,a);

2。

基类对象怎么能转换成派生类对象?

intCDaoListView:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

{

lpCreateStruct->style|=LVS_REPORT|LVS_EDITLABELS;

if(CListView:

:

OnCreate(lpCreateStruct)==-1)

return-1;

////////////创建ImageList;

CDaoViewApp*pApp=(CDaoViewApp*)AfxGetApp();

m_pImageList=newCImageList();

ASSERT(m_pImageList!

=NULL);

m_pImageList->Create(16,16,TRUE,4,4);

m_pImageList->Add(pApp->LoadIcon(IDI_KEY));

m_pImageList->Add(pApp->LoadIcon(IDI_ICON4));

m_pImageList->Add(pApp->LoadIcon(IDI_ICON5));

CListCtrlEx&ctlList=(CListCtrlEx&)

GetListCtrl();//我不懂的就这句,cListCtrlEx看下面的声明。

ctlList.SetImageList(m_pImageList,LVSIL_SMALL);

////////////

return0;

}

classCListCtrlEx:

publicCListCtrl//类cListCtrlEx定义。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2