多语言展示
当前在线:472今日阅读:84今日分享:32

String Cstring char* char wchar_t TCHAR

String、Cstring、char*之间的关系与转换一直都是似懂非懂的,而且在MFC程序汇中也不知道什么时候用哪一个,一头雾水。。于是把网上的东西,结合之间的理解整理了一下。
一、概述
1

一、概述先说char*(这个是基础),因为其应该是最简单和最基础的,其从作用上讲就相当于一般的int*或者double*,这种基础的结构。但是由于字符串的特殊性,我们有单独用了其他类来处理。在c++中用了String类,而在MFC中用了Cstring类。所以,从根本上说,char*是最基本的,而string和cstring只是对char*的一个拓展而已。

3

1:同级之间的string和cstringa:string到cstringcstring.format('%s',string.c_str());b:cstring到stringstring s(cstring.getbuffer());或者cstring cstr; string s=cstr;分析:a中是先把string通过函数c_str转换到char类型在通过char类型转换成ctring。b中的getbuffer是cstring的内部函数,其返回内存字符缓冲区的指针这里也是相当于通过char进行转换的。c中是通过赋值操作符进行转换。2:低级的向高级的转换(char*到string或者cstring)a:string到char*前面已经提到string的c_str函数就是实现这个转换,即可以用string.c_str().b:cstring到char*前面也提到函数getbuffer可以实现这个转换,用ctring.getbuffer()即可,也可以通过LPCTSTR进行强制转换。

4

三、总结这里可以看到这里面的中间过程还是基础的char*记住string和cstring的两个函数string.c_str()和cstring.getbuffer()可以得到char*即可或者LPCTSTR强制转换。

5

四、附加的char,wchar_t,TCHAR的区别这里涉及到两种编码方式ANSI和Unicode一个是美国用的(American),一个是通用的(Universal)。因此,char对应的是ANSI,wchar_t对应的是UnicodeTCHAR是两种都兼容的。对于三者通常对应的字符串处理函数的头文件分别为str***,wcs***,_tcs***.以strcpy函数为例子,总结一下: 如果你想使用ANSI字符串,那么请使用这一套写法:char szString[100]; strcpy(szString,'test');如果你想使用Unicode字符串,那么请使用这一套:wchar_t szString[100]; wcscpyszString,L'test'); .如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码:TCHAR szString[100]; _tcscpy(szString,_TEXT('test'));

6

注:(MFC中大部分都是要求通用的即wchar_t,而c++一般定义的ANSI。)他们之间的转换可以通过函数wcstombs(char* strDes, const wchar*, size_t nMax);这个函数的作用是把wchar转换为char。char* strDes 为保存转换后的普通字符串,wchar* 要被转换的宽字符串。转换的最大长度。这里的长度是转换的个数,而不是字节长度。mbstowcs() 就是一个相反的过程了。

推荐信息