字符串转换总结

    在编程中经常遇到一些有关于字符串转换的问题,如果你不熟悉经常会弄错,下面我就把我在项目开发过程中遇到的有关字符串转换的一些问题进行一下总结。

1 char*   <------>    wchar_t*

多字节字符串到宽字节字符串的转换可以使用函数MultiByteToWideChar,宽字节字符串到多字节字符串可以使用WideCharToMultiBytes。

2 char* /wchar_t*  <------>    CString

从char*/wchar_t*到CString可以直接将char*/wchar_t*赋给CString对象,注意CString也是可以保存宽字符字符串的。从CString转换成wchar_t*有点复杂(不知道还有什么其他的方法,如果有请告诉我,谢谢!),比如现在有CString str = L"abc";需要将str转换为wchar_t* ;

我的方法是:wchar_t  temp[str.GetLength()+1]; wmemset(temp, 0, sizeof(temp));  wcscpy_s(temp, sizeof(temp), LPCTSTR(str)); 

由CString转换成char*的方法也是一样的。

3 char*  <------>  const char*

首先char*是可以作为const char*来使用的,这个不需要程序员来转换。const char*转换成char*,可以使用const_cast<>()

我想只要知道上面的这三个,windows编程中的主要字符串问题都可以解决掉,另外CString不是C++中带有的类型,它只有在MFC中才有,才可以使用,CString其实是一个类,这个类用于处理字符串信息,很好用,但是不建议经常使用。

4 最后说一下像LPCTSTR这样的宏

注意LP指的是“指针类型”。C指的是const,不带C的就是non-const。T指的是TCHAR相关的意思。过去我们学习或使用主要都是多字节字符(串),而现在使用UNICODE早已是大势所趋。windows98之前的操作系统是不支持UNICODE的只支持多字节字符串,现在的2000、XP都支持UNICODE,所以我们会经常发现有些windows函数有两种形式比如SendMessageW,这里W指的就是宽字符,说明这个函数支持宽字符操作。但是系统却是向下兼容的,为了便与应用程序的移植,我们经常会见到TCHAR这样的类型,其实TCHAR不是一种类型,它只是一个宏。原型是这样的:

#ifndef _UNICODE

#define TCHAR char

#else    

#define TCHAR wchar_t

#endif

LPTSTR等也是这个道理!如果你的项目选择了UNICODE字符集,则LPTSTR == wchat_t*   LPCTSTR == const wchar_t*   。如果选择了多字节字符集,则LPCTSTR==const char*  LPTSTR==char*  。而LPWSTR是什么意思呢?W是指宽字符,也就是wchar_t*

最后建议大家在项目中、实践中,使用UNICODE字符集。

你可能感兴趣的:(编程,c,windows,XP,mfc)