标题: CString--C++数据类型转换详解 [打印本页]

作者: liuda    时间: 2015-1-23 02:11
标题: CString--C++数据类型转换详解
作者:~风中的叶~
一、自动转换和强制转换:
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(****)
下面详细写一下其它转换





//参考
///////////////////////
//Pocket PC上的UNICODE和ANSI字符串
////////////////////////







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1