各种类型转化
一、标准类型转化
1、对于int与float、string与char*之间的转化可以使用强制转化,或者标准库函数进行。
二、CString与string类型的区别与转化
区别:
1、首先要明确,标准C中是不存在string类型的,string是标准C++扩充字符串操作的一个类。但是我们知道标准C中有string.h这个头文件,这里要区分清楚。
2、string.h这个头文件中定义了一些我们经常用到的操作字符串的函数,如:strcpy、strcat、strcmp等等,但是这些函数的操作对象都是char*指向的字符串。
3、而C++的string类操作对象是string类型字符串,该类重装了一些运算符,添加了一些字符串操作成员函数,使得操作字符串更加方便。
转化:
对于CString与其他类型的转化方法很多,但其实都殊途同归,朝着一个方向即将类型首先转化为char*类型,因为char*是不同类型之间的桥梁(char*类型可以直接赋值给CString与string)。
1、CString->char*
CString cstr = "ksarea";
char* ptemp = cstr.getbuffer(0);
char* str;
strcpy(str,ptemp);
cstr.releasebuffer(-1);
2、char*->CString
char* str = "lovesha";
CString cstr = str; //string类型不能直接赋值给CString,但char*类型可以
3、string->const char*
c_str()方法,
如:string str=“world”;
const char *p = str.c_str();//同上,要加const或者等号右边用char*
const char*->char*
char* p1=const_cast<char*>(p)
4、char* ->string
char* str = "lovesha";
string cstr = str;
//
5、CString to string
1>//CString to string,要看你的CString用的是UNICODE还是非UNICODE
非UNICODE就简单了:
CString cstr = "ksarea";
char* ptemp = cstr.getbuffer(0);
string str=ptemp;
法二、str = LPCSTR(cstr);
2、UNICODE就麻烦点,需要特定函数才能做到
6、string to CString
string str="abcde";
CString cstr(str.c_str())
三、 CString是对string(字符串)和wstring(宽字符串)的一个封装,常用在mfc中.用来解决编码问题的.
1、 string或者wstring转换到CString:
要把string或者wstring类型的数据存放到CString中,直接调用string::c_str()或者wstring::c_str()就行了.
2、CString转换到string或者wstring
CString::GetBuffer(0)就能转换到string或者wstring.如果编译时候定义了UNICODE,则转换到wstring;如果未定义,则转换到string.所以若定义了UNICODE且要转到string话就需要函数来处理了。
3、CString 转数字
_ttoi()这是个宏,如果定义了UNICODE,则等价于_wtoi(),否则对应atoi(),要使用,需要引入<stdlib.h>
CString和int的转换
int i = 123;
CString str;
str.format( "%d",i); //int->CString 其他的基本类型转化类似
i = atoi(str);
4、数字转CString
int Value = 0;
CString::Format(_T("%d") , Value);
5、string 转数字
string和int的转换
C语言转换形式
string str;
int i = atoi(str.c_str());
C++转换形式(C++11):
string str;
int i = std::stoi(str);
6、数字转string
而int转string(C++11):
std::string to_string( int value );
四、CString 与LPCTSTR 、LPTSTR
1、CString 和 LPCTSTR 基本可以通用。
CString 转LPCTSTR:
CString cStr;
const char *lpctStr=(LPCTSTR)cStr;
LPCTSTR转CString:
LPCTSTR lpctStr;
CString cStr=lpctStr;
2、 LPTSTR不同,它是 char*, 意味着你随时可能修改里面的数据,这就需要内存管理了(如字符串变长,原来的存贮空间就不够了,则需要重新调整分配内存)。所以 不能随便的将 const char* 强制转换成 char* 使用。 比如一个函数接受一个字符串参数的输入,里面对该字符串又没有任何的修改,那么该参数就应该定义成 const char*, 但是很多初学者弄不清const地用法,或者是懒, 总之就是随意写成了 char* 。 这样子传入CString时就需要强制的转换一下。CString 转换到 LPTSTR (char*), 预定的做法是调用CString的GetBuffer函数,使用完毕之后一般都要再调用ReleaseBuffer函数来确认修改
相应工程连接如下:
1、http://download.csdn.net/download/zhangyuanxuevaq/10268730
本工程总结了:string2charx、string2charx、transchar、WChar2Ansi、wstring2string、wstring Utf_8ToUnicode、 GBKToUTF8几种类型的转化。2、http://download.csdn.net/download/zhangyuanxuevaq/10268722
本资源总结了AnsiToUnicode、UnicodeToAnsi、UnicodeToUTF8、U8ToUnicode
3、http://download.csdn.net/download/zhangyuanxuevaq/10268690
本工程总结了:string2charx、string2charx、transchar、WChar2Ansi、wstring2string、wstring Utf_8ToUnicode、 GBKToUTF8几种类型的转化。
注:本篇博文为自己学习过程的心得笔记,如有内容雷同,还请见谅,谢谢!