1、A2W和W2A

在《Window核心编程》,多字节和宽字节之间转换比较麻烦的,MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解。那么使用ATL的一个很好的字符串的转换宏:A2W和W2A。

一下示例都是在Unicode编码方式下进行编写。

(1)A2W的用法:多字节转宽字节

  1. USES_CONVERSION;
  2. CString tmpStr;
  3. char*LineChar="fdsfdsa";
  4. const WCHAR * cLineChar = A2W(LineChar);
  5. tmpStr=cLineChar;

(2)W2A的用法:宽字节转多字节

  1. USES_CONVERSION;
  2. CString tmpStr;
  3. WCHAR* LineChar="fdsfdsa";
  4. const char* cLineChar = W2A(LineChar);

2、A2T和T2A

(1)A2T的用法:char* ==> CString

  1. USES_CONVERSION;
  2. char * pChar="char to cstring";
  3. CString cTemp=A2T(pChar);
  4. //上面代码可以按照下面这样写
  5. CString cTemp; //不能在声明时赋值,会报错
  6. char* pChar = "1111";
  7. cTemp = pChar;

(2)T2A的用法:CString ==> char*

  1. USES_CONVERSION;
  2. CString cTemp =_T("char to cstring");
  3. char * pChar=T2A(pChar);

char、TCHAR转换CString

TransCStringToTCHAR

  1. //
  2. /*
  3. ***********************************************************************
  4. * 函数: TransCStringToTCHAR
  5. * 描述:将CString 转换为 TCHAR*
  6. * 日期:
  7. ***********************************************************************
  8. */
  9. TCHAR* CPublic::CString2TCHAR(CString &str)
  10. {
  11. int iLen = str.GetLength();
  12. TCHAR* szRs = new TCHAR[iLen];
  13. lstrcpy(szRs, str.GetBuffer(iLen));
  14. str.ReleaseBuffer();
  15. return szRs;
  16. }

TCHAR2Char

  1. /*
  2. ***********************************************************************
  3. * 函数: TCHAR2Char
  4. * 描述:将TCHAR* 转换为 char*
  5. * 日期:
  6. ***********************************************************************
  7. */
  8. char* TCHAR2char(TCHAR* tchStr)
  9. {
  10. int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度
  11. char* chRtn = new char[iLen+1]
  12. wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值
  13. return chRtn;
  14. }

char2tchar

  1. /*
  2. ***********************************************************************
  3. * 函数: char2tchar
  4. * 描述:将 char* 转换为 TCHAR*
  5. * 日期:
  6. ***********************************************************************
  7. */
  8. TCHAR *char2tchar(char *str)
  9. {
  10. int iLen = strlen(str);
  11. TCHAR *chRtn = new TCHAR[iLen+1];
  12. mbstowcs(chRtn, str, iLen+1); return chRtn;
  13. }

CString2char

  1. /*
  2. ***********************************************************************
  3. * 函数: CString2char
  4. * 描述:将CString转换为 char*
  5. * 日期:
  6. ***********************************************************************
  7. */
  8. char* CPublic::CString2char(CString &str)
  9. {
  10. int len = str.GetLength();
  11. char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的长度中汉字算一个长度
  12. memset(chRtn, 0, 2*len+1);
  13. USES_CONVERSION;
  14. strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));
  15. return chRtn;
  16. }