c++各种数据类型之间相互转化Word下载.docx
- 文档编号:20259849
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:11
- 大小:19.09KB
c++各种数据类型之间相互转化Word下载.docx
《c++各种数据类型之间相互转化Word下载.docx》由会员分享,可在线阅读,更多相关《c++各种数据类型之间相互转化Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
intatoi(
_int64_atoi64(
int_wtoi(
_int64_wtoi64(
_tstoi、_ttoi、_tstoi64、_ttoi64
_atoi_l、_wtoi_l、_atoi64_l、_wtoi64_l
//长整形函数
longatol(
constchar*string
long_wtol(
_tstoi、_ttoi
_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*_ui64toa(
unsigned_int64value,
wchar_t*_itow(
wchar_t*string,
wchar_t*_i64tow(
wchar_t*_ui64tow(
参数的意义:
value是指要转换的整儿,sring是用来存放转换后结果的便当,
radix是用来说明转换成几进制的数据,默认值是十进制数的
转换的进制范围是二进制到三十六进制示例代码:
intiii=123456789;
charii[100];
itoa(iii,ii,10);
ii中的结果就是字符串"
123456789"
intiii=12;
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<
stdlib.h>
stdio.h>
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"
ASCIIstring:
s,x);
-9885pigs"
//测试atoi
i=atoi(s);
atoitest:
%s\t\tinteger:
%d\n"
s,i);
98854dollars"
//测试atol
l=atol(s);
%s\t\tlong:
%ld\n"
s,l);
}
atoftest:
-2309.12E-15float:
-2.309120e-012
7.8912654773d210float:
7.891265E+210
-9885pigsinteger:
-9885
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("
LPTSTRlpsz=newTCHAR[theString.GetLength()+1];
_tcscopy(lpsz,theSting);
需要说明的是,strcpy(或可移植的_tcscpy)的第二参数是constwcahr_t*(Unicode)
或constchar*(ANSI),系统编译器将会自己主动对其进行转换
⑶使用GetBuffer
要是需要修改CString中的内部实质意义,它有1个特殊的方法可以使用,哪就是GetBuffer,
它的作用是返回1个可写的缓冲指针要是只是筹算修改字符或者截短字符串,
例如:
CStrings(_T("
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
11.BSTR、_bstr_t与CComBSTR的关系
CComBSTR是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,
BSTR是32位指针,但并不是直接指向字符串的缓冲区
⑴.typedef要害字
类型说明给已经存在的数据类型起1个体号,定义名字表示这个类型的新名字
类型说明的格式为typedef类型定义名;
例如,用下面语句定义整型数的新名字:
typedefintINT_COUNT;
//可读性更强(计数器类型为整型)
INT_COUNTintcount;
intCount=123;
cout<
<
intCount<
endl;
typedef同样可用来说明结构、联合以及枚举和类如:
typedefstructbook{
floatfprice;
char*szAuthor[20];
intnPage;
}
*BOOK;
viodfun()
BOOKmybook=newbook;
myBook->
fPrice=40.80;
szAuthor="
jf"
npage=200;
(2).typename要害字
typename和class用在模版定义开始部分时,它们的意义相同,但tpyename是用来
告诉编译器模版中有1个表示类型名
Template<
clsaaT>
calssfun{
Voidbar(){
T:
Bletch*p;
........
在上面所说的代码中,T:
Bletch*p是指啥子,这一点儿就很让人迷惑但要是写成这样就不会
呈现这个问题:
classT>
classfun
Voidbar()
TypenameT:
在模版定义里,也能够用<
typenameT>
取代<
即template<
与
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个布尔值:
vb.vt=VT_BOOL;
va.boolVal=VARIANT_TRUE;
利用VARIANT生存1个字符串:
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+ 各种 数据类型 之间 相互 转化