CString 类型转换大全.docx

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

CString 类型转换大全.docx

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

CString 类型转换大全.docx

CString类型转换大全

CString类型转换大全

首页>CString转int_ttoi()_tcstoul()FormatASSERT()

作者:

tags:

FormforTCORMStringintCStringassertstrsseingforinassertint_ttoi()_tcstoul()FormatASSERT()

-

CString型转化成int型  把CString类型的数据转化成整数类型最简单的方法就是使用标准的字符串到整数转换例程。

  虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个正确的选择。

假如你预备使用Unicode字符,你应该用_ttoi(),它在ANSI编码系统中被编译成_atoi(),而在Unicode编码系统中编译成_wtoi()。

你也可以考虑使用_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制、八进制、十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反。

看下面的例子:

  CStringhex=_T("FAB");

  CStringdecimal=_T("4011");

  ASSERT(_tcstoul(hex,0,16)==_ttoi(decimal));

在做DWORD与CString比较的时候,需要将CString转换成DWORD,有几种转换方法,但是明明转换结果是一样的,可就是提示不相等,后来_tcstoul()转换后才相等,记录下

   CStringstr=lp->GetSubItem(nCol);   

                  //   MessageBox(str,m_strItem,MB_OK);

                  

                  DWORDdwData=_tcstoul(str,NULL,10);//10进制

                  if(dwItem==dwData)

                  {

                     //AfxMessageBox("找到找到找到找到找到找到找到找到找到找到找到找到找到");                     

                      returnpCur;

                  }

使用_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制、八进制、十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反。

看下面的例子:

CStringhex=_T("FAB");

CStringdecimal=_T("4011");

ASSERT(_tcstoul(hex,0,16)==_ttoi(decimal));

 

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

Format函数

  VC++中Format函数详解

  首先看它的声明:

 

  functionFormat(constFormat:

string;constArgs:

arrayofconst):

string;overload; 

  事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的, 

  但并不多用,所以这里只对第一个介绍:

 

  functionFormat(constFormat:

string;constArgs:

arrayofconst):

string;overload; 

  Format参数是一个格式字符串,用于格式化Args里面的值的。

Args又是什么呢, 

  它是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。

 

  如以下例子:

 

  Format("mynameis%6s","wind"); 

  返回后就是 

  mynameiswind 

  

  现在来看Format参数的具体情况:

 

  Format里面可以写普通的字符串,比如"mynameis" 

  但有些格式指令字符具有非凡意义,比如"%6s" 

  格式指令具有以下的形式:

 

  "%"[index":

"]["-"][width]["."prec]type 

  它是以"%"开始,而以type结束,type表示一个具体的类型。

中间是用来 

  格式化type类型的指令字符,是可选的。

 

  先来看看type,type可以是以下字符:

 

  d 十制数,表示一个整型值 

  u 和d一样是整型值,但它是无符号的,而假如它对应的值是负的,则返回时 

  是一个2的32次方减去这个绝对值的数 

  如:

Format("thisis%u",-2); 

  返回的是:

thisis4294967294 

  f 对应浮点数 

  e 科学表示法,对应整型数和浮点数, 

  比如Format("thisis%e",-2.22); 

  返回的是:

thisis-2.220000E+000 

  等一下再说明假如将数的精度缩小 

  g 这个只能对应浮点型,且它会将值中多余的数去掉 

  比如Format("thisis%g",02.200); 

  返回的是:

thisis2.2 

  n 只能对应浮点型,将值转化为号码的形式。

看一个例子就明白了 

  Format("thisis%n",4552.2176); 

  返回的是thisis4,552.22 

  注重有两点,一是只表示到小数后两位,等一下说怎么消除这种情况 

  二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开的 

  m 钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化 

  另外它只对应于浮点值 

  Format("thisis%m",9552.21); 

  返回:

thisis¥9,552.21 

  p 对应于指针类型,返回的值是指针的地址,以十六进制的形式来表示 

  例如:

 

  Format("thisis%p",p); 

  Edit1的内容是:

thisis0012F548 

  s 对应字符串类型,不用多说了吧 

  x 必须是一个整形值,以十六进制的形式返回 

  Format("thisis%X",15); 

  返回是:

thisisF 

  

  类型讲述完毕,下面介绍格式化Type的指令:

 

  [index":

"] 这个要怎么表达呢,看一个例子 

  Format("thisis%d%d",12,13); 

  其中第一个%d的索引是0,第二个%d是1,所以字符显示的时候 

  是这样 thisis1213 

  

  而假如你这样定义:

 

  Format("thisis%1:

d%0:

d",12,13); 

  那么返回的字符串就变成了 

  thisis1312 

  现在明白了吗,[index":

"]中的index指示Args中参数显示的 

  顺序 

  还有一种情况,假如这样Format("%d%d%d%0:

d%d",1,2,3,4);

  将返回12312。

 

  假如你想返回的是12314,必须这样定:

 

  Format("%d%d%d%0:

d%3:

d",1,2,3,4);

  但用的时候要注重,索引不能超出Args中的个数,不然会引起异常 

  如Format("thisis%2:

d%0:

d",12,13); 

  由于Args中只有1213两个数,所以Index只能是0或1,这里为2就错了 

  [width] 指定将被格式化的值占的宽度,看一个例子就明白了 

  Format("thisis%4d",12); 

  输出是:

thisis12 

  这个是比较轻易,不过假如Width的值小于参数的长度,则没有效果。

 

  如:

Format("thisis%1d",12); 

  输出是:

thisis12 

  ["-"] 这个指定参数向左齐,和[width]合在一起最可以看到效果:

 

  Format("thisis%-4d,yes",12); 

  输出是:

thisis12,yes 

  ["."prec] 指定精度,对于浮点数效果最佳:

 

  Format('thisis%.2f',['1.1234]); 

  输出thisis1.12 

  Format('thisis%.7f',['1.1234]); 

  输了thisis1.1234000 

  而对于整型数,假如prec比如整型的位数小,则没有效果 

  反之比整形值的位数大,则会在整型值的前面以0补之 

  Format('thisis%.7d',[1234]); 

  输出是:

thisis0001234] 

  

  对于字符型,刚好和整型值相反,假如prec比字符串型的长度大 

  则没有效果,反之比字符串型的长度小,则会截断尾部的字符 

  Format('thisis%.2s',['1234']); 

  输出是thisis12 

  

  而上面说的这个例子:

 

  Format('thisis%e',[-2.22]); 

  返回的是:

thisis-2.22000000000000E+000 

  怎么去掉多余的0呢,这个就行啦 

  Format('thisis%.2e',[-2.22]); 

  好了,第一个总算讲完了,应该对他的应用很熟知了吧 

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

  二FormatDateTime的用法 

  他的声明为:

 

  functionFormatDateTime(constFormat:

string;DateTime:

TDateTime):

string; 

  overload; 

  当然和Format一样还有一种,但这里只介绍常用的第一种 

  Format参数是一个格式化字符串。

DateTime是时间类型。

返回值是一种格式化后的 

  字符串 

  重点来看Format参数中的指令字符 

  c以短时间格式显示时间,即全部是数字的表示 

  FormatdateTime('c',now); 

  输出为:

2004-8-79:

55:

40 

  d对应于时间中的日期,日期是一位则显示一位,两位则显示两位 

  FormatdateTime('d',now); 

  输出可能为1~31 

  dd和d的意义一样,但它始终是以两位来显示的 

  FormatdateTime('dd',now); 

  输出可能为01~31 

  ddd显示的是星期几 

  FormatdateTime('ddd',now); 

  输出为:

星期六 

  dddd和ddd显示的是一样的。

 

  但上面两个假如在其他国家可能不一样。

 

  ddddd以短时间格式显示年月日 

  FormatdateTime('ddddd',now); 

  输出为:

2004-8-7 

  dddddd以长时间格式显示年月日 

  FormatdateTime('dddddd',now); 

  输出为:

2004年8月7日 

  e/ee/eee/eeee以相应的位数显示年 

  FormatdateTime('ee',now); 

  输出为:

04(表示04年) 

  m/mm/mmm/mmmm表示月 

  FormatdateTime('m',now); 

  输出为:

  FormatdateTime('mm',now); 

  输出为08 

  FormatdateTime('mmm',now); 

  输出为八月 

  FormatdateTime('mmmm',now); 

  输出为八月 

  和ddd/dddd一样,在其他国家可能不同 

  yy/yyyy表示年 

  FormatdateTime('yy',now); 

  输出为04 

  FormatdateTime('yyyy',now); 

  输出为2004 

  h/hh,n/nn,s/ss,z/zzz分别表示小时,分,秒,毫秒 

  t以短时间格式显示时间 

  FormatdateTime('t',now); 

  输出为10:

17 

  tt以长时间格式显示时间 

  FormatdateTime('tt',now); 

  输出为10:

18:

46 

  ampm以长时间格式显示上午还是下午 

  FormatdateTime('ttampm',now); 

  输出为:

10:

22:

57上午 

  

  大概如此,假如要在Format中加普通的字符串,可以用双引号隔开那些 

  特定义的字符,这样普通字符串中假如含非凡的字符就不会被显示为 

  时间格式啦:

 

  FormatdateTime('"todayis"c',now); 

  输出为:

todayis2004-8-710:

26:

58 

  时间中也可以加"-"或""来分开日期:

 

  FormatdateTime('"todayis"yy-mm-dd',now); 

  FormatdateTime('"todayis"yymmdd',now); 

  输出为:

todayis04-08-07 

  也可以用":

"来分开时间 

  FormatdateTime('"todayis"hh:

nn:

ss',now); 

  输出为:

todayis10:

32:

23 

  

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

  三.FormatFloat的用法 

  常用的声明:

 

  functionFormatFloat(constFormat:

string;Value:

Extended):

string;overload; 

  和上面一样Format参数为格式化指令字符,Value为Extended类型 

  为什么是这个类型,因为它是所有浮点值中表示范围最大的,假如传入该方法的参数 

  比如Double或者其他,则可以保存不会超出范围。

 

  要害是看Format参数的用法 

  0这个指定相应的位数的指令。

 

  比如:

FormatFloat('000.000',22.22); 

  输出的就是022.220 

  注重一点,假如整数部分的0的个数小于Value参数中整数的位数,则没有效果 

  如:

FormatFloat('0.00',22.22); 

  输出的是:

22.22 

  但假如小数部分的0小于Value中小数的倍数,则会截去相应的小数和位数 

  如:

FormatFloat('0.0',22.22); 

  输出的是:

22.2 

  也可以在整数0中指定逗号,这个整数位数必须大于3个,才会有逗号出句 

  FormatFloat('0,000.0',2222.22); 

  输出是:

2,222.2 

  假如这样FormatFloat('000,0.0',2222.22); 

  它的输出还是:

2,222.2 

  注重它的规律 

  #和0的用法一样,目前我还没有测出有什么不同。

 

  FormatFloat('##.##',22.22); 

  输出是:

22.00 

  

  E科学表示法,看几个例子大概就明白了 

  FormatFloat('0.00E+00',2222.22); 

  输出是2.22E+03 

  FormatFloat('0000.00E+00',2222.22); 

  输出是2222.22E+00 

  FormatFloat('00.0E+0',2222.22); 

  22.2E+2 

  明白了吗,全靠E右边的0来支配的。

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

ANSI和UNICODE的函数对应表

ANSI       UNICODE     通用

(char.h)   (wchar.h)       (tchar.h)

char       wchar_t         TCHAR

char*     wchar_t*       PTCHAR(PTSTR,LPWSTR,PWSTR,WCHAR)

printf     wprintf         _tprintf

scanf      wscanf          _tscanf

atoi       _wtoi           _ttoi

atol       _wtol           _ttol

itoa       _itow           _itot

ltoa       _ltow           _ltot

atof       _wtof           _tstof

strlen     wcslen          _tcslen

strcat      wcscat         _tcscat

strcpy     wcscpy         _tcscpy

strcmp     wcscmp        _tcscmp

 

 

ASCII

UNICODE

TCHAR

VS2005

int

atoi

_wtoi

_tstoi

_ttoi

_atoi_l

_wtoi_l

long

atol

_wtol

_tstoi

_ttoi

_atoi_l

_wtoi_l

__int64

_atoi64

_wtoi64

_tstoi64

_ttoi64

_atoi64_l

_wtoi64_l

float

 

 

 

_atoflt

_atoflt_l

double

atof

_wtof

_tstof

_ttof

_atof_l

_wtof_l

_atodbl

_atodbl_l

longdouble

 

 

 

_atoldbl

_atoldbl_l

atof,_atof_l,_wtof,_wtof_l

Convertstringtofloat

atoi,_atoi_l,_wtoi,_wtoi_l

Convertstringtoint

_atoi64,_atoi64_l,_wtoi64,_wtoi64_l

Convertstringto__int64

atol,_atol_l,_wtol,_wtol_l

Convertstringtolong

_ecvt,_ecvt_s

Convertdoubletostringofspecifiedlength

_fcvt,_fcvt_s

Convertdoubletostringwithspecifiednumberofdigitsfollowingdecimalpoint

_gcvt,_gcvt_s

Convertdoublenumbertostring;storestringinbuffer

_itoa,_i64toa,_ui64toa,_itow,_i64tow,_ui64tow,_itoa_s,_i64toa_s,_ui64toa_s,_itow_s,_i64tow_s,_ui64tow_s

Convertintor__int64tostring

_ltoa,_ltow,_ltoa_s,_ltow_s

Convertlongtostring

strtod,_strtod_l,wcstod,_wcstod_l

Convertstringtodouble

strtol,wcstol,_strtol_l,_wcstol_l

Convertstringtolonginteger

strtoul,_strtoul_l,wcstoul,_wcstoul_l

Convertstringtounsignedlonginteger

_ultoa,_ultow,_ultoa_s,_ultow_s

Convertunsignedlongtostring

atof,_atof_l,_wtof,_wtof_l

Convertwide-characterstringtoadouble

atoi,_atoi_l,_wtoi,_wtoi_l

Convertwide-characterstringtoint

_atoi64,_atoi64_l,_wtoi64,_wtoi64_l

Convertwide-characterstringto__int64

atol,_atol_l,_wtol,_wtol_l

Convertwide-characterstringtolong

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

ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,假如表达式为FALSE (0), 程序将报告错误,并终止执行。

假如表达式不为0,则继续执行后面的语句。

这个宏通常原来判定程序中是否出现了明显非法的数据,假如出现了终止程序以免导致严重后果,同时也便于查找错误。

 

ASSERT只有在Debug版本中才有效,假如编译为Release版本则被忽略。

 

------------------------------

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

当前位置:首页 > 医药卫生 > 基础医学

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

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