找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2648|回复: 0
打印 上一主题 下一主题
收起左侧

CString--C++数据类型转换详解

[复制链接]
跳转到指定楼层
楼主
ID:72519 发表于 2015-1-23 02:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
作者:~风中的叶~
一、自动转换和强制转换:
1.1数据类型自动转换:
原则:短数据------à长数据

1.2数据类型强制转换:
原则:长变短、有变无都是把存储的数据直接从低位到高位复制(符号位也作为数据处理)。
例:int i;    short j;  j=(short)i;
例:longi;    i=1L;
二、数据转换为字符串(数组)
2.1转成十进制:
int i=100;
CString str;
str.Format(_T("%d"),i); //转换成十进制
  %c                 单个字符
  %d                 十进制整数(int)
  %ld                十进制整数(long)
  %f                 十进制浮点数(float)
  %lf                十进制浮点数(double)
  %o                 八进制数
  %s                 字符串
  %u                 无符号十进制数
   %x                 十六进制数
或者
int i=100;
CString str;
char ch[8];
sprintf(ch,"%d",i);//只能转成数组形式
str=ch;
或者
char ch[8];
char *chp;
chp=itoa(i,ch,10);
2.2转成十六进制:
int i=100;
CString str;
str.Format( _T("%.2x"),i); //转换两位十六进制
三、数据串之间的转换
3.1字符串转换为数组:
CString str=_T("12好asdf");
    char ch[16]={0x00};
    WideCharToMultiByte ( CP_ACP,                //ANSI代码页
                          WC_COMPOSITECHECK,     //检查非映射复合字符
                          str,                   //Unicode
                        str.GetLength(),      //Unicode 长度(-1 意思是串以0x00结尾)
                          ch,                   //目的char字符串
                          sizeof(ch),          //缓冲大小
                          NULL,                //缺省字符串
                          NULL );              //忽略这个参数
3.2数组转换为字符串:
char ch[8]="abc";//注意以’\0’=0结尾
CString str= (CA2CT)ch;
四、字符串其他处理
http://msdn.microsoft.com/zh-cn/library/tzzky29w(v=vs.80).aspx
4.1取字符串长度:    int len = str.GetLength();
4.2拼接字符串:      CString str= str1 + str2;
4.3在字串中指定索引位插入指定字符:CString str.Insert(1,_T("a"));//在1号位之前插入a
4.4截取字串的一部分:CString substr=str.Left(2);//从左侧截取两个字节的数据
CString substr=str.Right(2); //从右侧截取两个字节的数据
CString substr=str.Mid(1,2); //参数1为左起始位数,参数2为截取几位
4.5清除字串前后空格:str.Trim();//移除前后空格
清除字串前空格:   str.TrimLeft();//移除后空格
清除字串前空格:   str.TrimRight();//移除前空格
str.Remove(' ');//移除所有空格
4.6字符串替换:      str.Replace(_T("12"),_T("34"));
4.7字符串删除:      str.Delete(1,6);
五、 字符串转换为数据
5.1字符串转换为整型:

int           i=atoi(str);//ANSI类型 int atoi(const char *nptr);
long          i=atol(str);//ANSI类型 long atol(const char *nptr);
double        i=atof(str);//ANSI类型 double atof(const char *nptr);
long          i=strtol(str);//ANSI类型 long int strtol(const char *nptr,char **endptr,int base);
unsigned long i=strtoul(str,NULL);//ANSI类型 unsigned long strtoul(const char *nptr,char **endptr,int base);  
double        i=strtod(str,NULL);//ANSI类型 double strtod(const char *nptr,char **endptr);
int           i=_wtoi(str);//Unicode码
int           i=_ttoi(str); //Unicode码
5.2字符串按十六进制转换为整型:
long         i=strtol(str,0,16);//ANSI类型
    unsigned long i=strtoul(str,0,16);//ANSI类型
    long          i=wcstol(str,0,16);//Unicode码
    long          i=_tcstol(str,0,16);//Unicode码
六、其他转换 :
TCHAR是一种字符串类型,它让你在以MBCS和UNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代表ASCII的字符
#ifdef UNICODE
   typedef wchar_t TCHAR;
   #else
   typedef char TCHAR;
   #endif

所以用MBCS来build时,TCHAR是char,使用UNICODE时,TCHAR是wchar_t.
至于String,CString他们都是一种封装了字串处理的操作!
你可以打开他们的源代码找寻究竟!
CString属于VC的类库
string是标准C++的类库
string.h是C的库函数。

研究它们的源代好些!
TCHAR,char是可以同整型互换的类型。
String,CString代表了一块内存区域。
TCHAR 赋值
#include <tchar.h>
TCHAR szWindowText[256]=_T("QQ2006");
char*、TCHAR*转换CString
CString str(****)
下面详细写一下其它转换
  • /* *********************************************************************
  • * 函数: TransCStringToTCHAR
  • * 描述:将CString 转换为 TCHAR*
  • * 日期:
  • ***********************************************************************/
  • TCHAR* CPublic::CString2TCHAR(CString &str)
  • {
  • int iLen = str.GetLength();
  • TCHAR* szRs = new TCHAR[iLen];
  • lstrcpy(szRs, str.GetBuffer(iLen));
  • str.ReleaseBuffer();
  • return szRs;
  • }

  • /***********************************************************************
  • * 函数: THCAR2Char
  • * 描述:将TCHAR* 转换为 char*
  • * 日期:
  • ***********************************************************************
  • */
  • char* CPublic::THCAR2char(TCHAR* tchStr)
  • {
  • int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度
  • char* chRtn = new char[iLen+1]
  • wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值
  • return chRtn;
  • }


  • /*
  • ***********************************************************************
  • * 函数: CString2char
  • * 描述:将CString转换为 char*
  • * 日期:
  • ***********************************************************************
  • */
  • char* CPublic::CString2char(CString &str)
  • {
  • int len = str.GetLength();
  • char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的长度中汉字算一个长度
  • memset(chRtn, 0, 2*len+1);
  • USES_CONVERSION;
  • strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));
  • return chRtn;
  • }


//参考
///////////////////////
//Pocket PC上的UNICODE和ANSI字符串
////////////////////////
  • /*
  • ***********************************************************************
  • * 函 数 名:GetAnsiString
  • * 描 述:将CString(unicode)转换为char*(ANSI)
  • * 参 数:CString &s 要转换的CString
  • * 返 回 值:返回转换结果
  • * 创建日期:
  • * 最后修改:
  • ***********************************************************************
  • */
  • char* GetAnsiString(const CString &s)
  • {
  • int nSize = 2*s.GetLength();
  • char *pAnsiString = new char[nSize+1];
  • wcstombs(pAnsiString, s, nSize+1);
  • return pAnsiString;
  • }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表