您的位置:首页 > 其它

MFC下的各种字符串类型和相互转换

2016-04-28 10:42 417 查看
MFC下的常用字符串数据类型表示的含义:

L:Long  长  P:Point  指针  C:Const 
常量  W:Wchar_t  宽字符  T:TCHAR   STR:String  字符串

在看看MFC下各种数据类型的定义:

1     typedef char *LPSTR;
2     typedef const char *LPCSTR;
3
4     typedef wchar_t *LPWSTR;
5     typedef const wchar_t *LPCWSTR;
6     typedef wchar_t WCHAR;
7
8 #ifdef  UNICODE
9     typedef LPCWSTR  LPCTSTR;
10     typedef WCHAR TCHAR;
11
12 #else
13     typedef LPCSTR LPCTSTR;
14     typedef char TCHAR;


 

MFC下提供的ATL 转换宏:

T2A  T2W  T2CA T2CW         W2A  W2CA W2T  W2CT         A2W  A2CW A2T  A2CT 

T:TCHAR  2:To  C:CONST  A:CHAR(ANSI)  W:WCHAR

先到atlconv.h头文件下看看这些宏的定义,

1.USES_CONVERSION:注意int _convert; (_convert);这种用法是为了屏蔽编译器的警告:未引用的局部变量。。。

#ifndef _DEBUG
#define USES_CONVERSION int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa)
#else
#define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)
#endif


可见,USES_CONVERSION宏定义了一些转换所需要的变量,如_convert。所以使用那些宏的时候必须加上该宏。

2.A2W:这里就用到了USES_CONVERSION宏定义的_convert变量

1 #define A2W(lpa) (\
2  ((_lpa = lpa) == NULL) ? NULL : (\
3  _convert = (lstrlenA(_lpa)+1),\
4  (INT_MAX/2<_convert)? NULL :  \
5  ATLA2WHELPER((LPWSTR) alloca(_convert*sizeof(WCHAR)), _lpa, _convert, _acp)))


3.ATLA2WHELPER

1  #define ATLA2WHELPER AtlA2WHelper


 

4.AtlA2WHelper:实际上还是在调用MultiByteToWideChar,即多字节转换为宽字节

1  _Ret_opt_z_cap_(nChars) inline LPWSTR WINAPI AtlA2WHelper(_Out_z_cap_(nChars) LPWSTR lpw, _In_z_ LPCSTR lpa, _In_ int nChars, _In_ UINT acp) throw()
2  {
3   ATLASSERT(lpa != NULL);
4   ATLASSERT(lpw != NULL);
5   if (lpw == NULL || lpa == NULL)
6    return NULL;
7   *lpw = '\0';
8   int ret = MultiByteToWideChar(acp, 0, lpa, -1, lpw, nChars);
9   if(ret == 0)
10   {
11    ATLASSERT(FALSE);
12    return NULL;
13   }
14   return lpw;
15  }


5.alloca

#define alloca  _alloca


6._alloca:该函数从堆上分配以字节为单位的内存,返回void *

1 void *_alloca(
2   size_t size
3   );


 

使用方法举例:

1  USES_CONVERSION;//USES_CONVERSION是ATL中的一个宏定义,用于编码转换,它定义了转换宏所需的一些局部变量
2
3  WCHAR *pWch = L"WCHAR* TO CHAR*";
4  CHAR *pCh = W2A(pWch);
5
6  TCHAR *pTch = _T("TCHAR* TO CHAR*");
7  CHAR *pCh2 = T2A(pTch);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc