c++各种数据类型之间相互转化.docx
- 文档编号:7161403
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:11
- 大小:19.09KB
c++各种数据类型之间相互转化.docx
《c++各种数据类型之间相互转化.docx》由会员分享,可在线阅读,更多相关《c++各种数据类型之间相互转化.docx(11页珍藏版)》请在冰豆网上搜索。
c++各种数据类型之间相互转化
⑴.char*转换到BSTR
BSTRb=_com_util:
:
ConvertStringToBSTR("数据");
SysFreeString(bstrValue);
(2).BSTR转换到char*
char*p=_com_util:
:
ConvertBSTRToString(b);
deletep;
12.typedef和typename要害字
这两个要害字在运用的时辰时例会令人迷惑,其实很简单,typedef是类型定义,
而typename是类型解释2009年04月20日
类型转换是将一种类型的值映射为另一种类型的值进行数据类型的转换
是在实际代码编写中经常遇到的问题,出格是字符串和其它类型的转换
1.将字符串转换为整儿
(1).转换函数
//双精度函数
doubleatof(
constchar*string
);
double_wtof(
constwchar_t*string
);
自适应
TCHAR:
_tstof、_ttof
VS2005:
_atof_l、_wtof_l、_atodbl、_atodbl_l
//整型函数
intatoi(
constchar*string
);
_int64_atoi64(
constchar*string
);
int_wtoi(
constwchar_t*string
);
_int64_wtoi64(
constchar*string
);
自适应
TCHAR:
_tstoi、_ttoi、_tstoi64、_ttoi64
VS2005:
_atoi_l、_wtoi_l、_atoi64_l、_wtoi64_l
//长整形函数
longatol(
constchar*string
);
long_wtol(
constwchar_t*string
);
自适应
TCHAR:
_tstoi、_ttoi
VS2005:
_atoi_l、_wtoi_l
可参考:
ml
(2).代码参考
Cstringting="1234";
intnum=atoi(ting);
num的值为1234.
CStringting="1234";
doublenum=atof(ting);
最终结果:
num值为1234.0000000000000
2.int转换为字符串
cahr*_itoa(
intvalue,
char*string,
intradix
);
char*_i64toa(
_int64value,
char*string,
intradix
);
char*_ui64toa(
unsigned_int64value,
char*string,
intradix
);
wchar_t*_itow(
intvalue,
wchar_t*string,
intradix
);
wchar_t*_i64tow(
_int64value,
wchar_t*string,
intradix
);
wchar_t*_ui64tow(
unsigned_int64value,
wchar_t*string,
intradix
);
参数的意义:
value是指要转换的整儿,sring是用来存放转换后结果的便当,
radix是用来说明转换成几进制的数据,默认值是十进制数的
转换的进制范围是二进制到三十六进制示例代码:
intiii=123456789;
charii[100];
itoa(iii,ii,10);
ii中的结果就是字符串"123456789"
intiii=12;
charii[100];
itoa(iii,ii,2);
ii中的结果是字符串"1100"
3.long转换为字符串
char*_ltoa(longvalue,char*string,intradix);
wchar_t*_ltow(longvalue,wchar_t*string,intradix);
其中,参数value为被转换的值,参数string为字符串缓冲区,radix为进制
代码参考:
lingl=100;chartemp[10];
memset(temp,0,10);
ltoa(l,temp,10);
4.double转换为字符串
char*_fcvt(doublevalue,intcount,int*dec,int*sign);
其中参数value为双精度数,参数count为转换的小数点后面的位数,dec表示小数点的位置,
sign表示符号代码参数如下
intdecimal,sign;
char*buffer;
dobulesource=3.1415926535;
buffer=_fcbt(source,7,&decimal,&sign);
输出结果:
sourec:
3.1415926535;buffer:
''31415927''decimal:
1sign:
0
5.日期类型转换为字符串
将一日期格式转换为字符串,利用了格式化函数,参考代码如下:
CTimeti=Ctime:
:
GetCurrentTime();
CstringstrTemp("");
strTemp=ti.Format("%Y%m%d%H%H%S")
6.字符串转换为短整型
intatoi(constchar*string);
其中,参数constchar*string为要转换的字符串,返回值为转换的结果
7.字符串转换为长整型
longatol(constchar*string)
8.字符串转换为双精度类型
doubleatof(constchar*string)
代码参考:
#include
#include
voidmain(void)
{
char*s;dobulex;inti;longl;
s="-2309.12E-15";//测试atof
x=atof(s);
printf("atoftest:
ASCIIstring:
%s\tfloat:
%e\n",s,x);
s="7.8912654773d210";//测试atof
x=atof(s);
printf("atoftest:
ASCIIstring:
%s\tfloat:
%e\n",s,x);
s="-9885pigs";//测试atoi
i=atoi(s);
printf("atoitest:
ASCIIstring:
%s\t\tinteger:
%d\n",s,i);
s="98854dollars";//测试atol
l=atol(s);
printf("atoitest:
ASCIIstring:
%s\t\tlong:
%ld\n",s,l);
}
输出结果:
atoftest:
ASCIIstring:
-2309.12E-15float:
-2.309120e-012
atoftest:
ASCIIstring:
7.8912654773d210float:
7.891265E+210
atoftest:
ASCIIstring:
-9885pigsinteger:
-9885
atoftest:
ASCIIstring:
98854dollarslong:
98854
9.char*和CString的相互转换
CString饱含了三个值:
指向某个数据缓冲区的指针、该缓冲区中有用的字符记数
(它是不可存取的,是位于CString地址之下的1个隐藏地区范围)及1个缓冲区长度
有用字符数的巨细可所以从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有1个灭茬字符)
⑴char*转换为CString
☆直接赋值
☆利用格式化转换
CStringstrConvert;
TCHAR*P=_T("thisisachTostringtest");
strConvert=p;//直接赋值
strConvert.Format("%s",p);//格式化
(2)CString转换为char*
☆强制类型转换为LPCTSTR
CStringtheString((_T("Chartest"));
LPTSTRlpsz=(LPTSTR)(LPCTSTR)theString;
☆使用strcpy
CStringtheString((_T("Chartest"));
LPTSTRlpsz=newTCHAR[theString.GetLength()+1];
_tcscopy(lpsz,theSting);
需要说明的是,strcpy(或可移植的_tcscpy)的第二参数是constwcahr_t*(Unicode)
或constchar*(ANSI),系统编译器将会自己主动对其进行转换
⑶使用GetBuffer
要是需要修改CString中的内部实质意义,它有1个特殊的方法可以使用,哪就是GetBuffer,
它的作用是返回1个可写的缓冲指针要是只是筹算修改字符或者截短字符串,
例如:
CStrings(_T("Chartest"));
LPTSTRp=s.GetBuffer();
//添加P的代码
s.ReleaseBuffer()//使用完后实时开释
10.CString与BSTR的相互转换
(1).CString转换为BSTR
挪用CString对象的AllocSysString方法将CString转化成BSTR,如:
CStringstr="thisisatest";
BSTRb=str.AllosysString();
str.FreeSystring();//最后不要忘记了开释
(2).BSTR转换为CString
CStringconvert(BSTRb)
{
CStrings;
if(b==灭茬)
returns;
#ifdefUNICODE
s=b;
#else
LPSTRp=s.GetBuffer(SYsStringLen(b)+1);
:
:
WidecharToMultiByte(CP_ACP,
0,
b,
-1,
p,
SysStringLen(b)+1,
灭茬,
灭茬);
s.ReleaseBuffer();
#endif
returns;
}
11.BSTR、_bstr_t与CComBSTR的关系
CComBSTR是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,
BSTR是32位指针,但并不是直接指向字符串的缓冲区
⑴.typedef要害字
类型说明给已经存在的数据类型起1个体号,定义名字表示这个类型的新名字
类型说明的格式为typedef类型定义名;
例如,用下面语句定义整型数的新名字:
typedefintINT_COUNT;//可读性更强(计数器类型为整型)
INT_COUNTintcount;
intCount=123;
cout< typedef同样可用来说明结构、联合以及枚举和类如: typedefstructbook{ floatfprice; char*szAuthor[20]; intnPage;} *BOOK; viodfun() { BOOKmybook=newbook; myBook->fPrice=40.80; myBook->szAuthor="jf"; myBook->npage=200; } (2).typename要害字 typename和class用在模版定义开始部分时,它们的意义相同,但tpyename是用来 告诉编译器模版中有1个表示类型名 Template Voidbar(){ T: : Bletch*p; ........ } } 在上面所说的代码中,T: : Bletch*p是指啥子,这一点儿就很让人迷惑但要是写成这样就不会 呈现这个问题: Template { Voidbar() { TypenameT: : Bletch*p; } } 在模版定义里,也能够用 templare 13.VARIANT的处理技巧 1.VARIANT的定义 VARIANT被称为变体类型,其定义可以参考头文件VC98\INCLUDE\OAIDL.H 关于结构体tagVARIANT定义 2.引入VARIANT的缘故原由 目前计算机语言多种多样,如C++、java、Basic、Pascal等,它们各自又都有自己的 数据类型,VARIANT数据类型就具有跨语言的特性,同时它可以表示(储存)任意类型 的数据从C语言的角度来讲,VARIANT其实是1个结构,结构顶用1个域(vt)表示,同时 正真的数据则存储在union空间中 3.VARIANT的应用 利用VARIANT表示可1个整型数据: VARIANTva; inta=2001; va.vt=VT_I4;//指明整型数据 va.lVal=a;//赋值 利用VARIANT表示1个布尔值: VARIANTva; vb.vt=VT_BOOL;//指明整型数据 va.boolVal=VARIANT_TRUE;//赋值 利用VARIANT生存1个字符串: VARIANTva; va.vt=VT_BSTR; va.bstrVal=SysAllocString(L"Hello,thisisatest"); 从上面可以看出这种类型使用起来比较复杂,其实有简单的方法,采用VARIANT的封装类_variant_t,其赋值 可以使用强制类型转换,其构造函数会自己主动处理这些个数据类型 代码参考如下: longl=222; ingi=100; _varint_tlVal(l); lVal=(long)i; 也能够用ColeVariant来简化对VARIANT的操作,代码参考如下: COleVariantv3="thisisatest",v4=(long)1999; CStringstr=(BSTR)v3.pbstrVal; longi=v4.lVal;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 各种 数据类型 之间 相互 转化