虽然网上关于CString,string,char数组的转换的文章一大堆,但是感觉很乱很杂,而且许多并不能真正达到目的,在此,我把自己调试通过的转换方法贴到这里,做个笔记。

    编译环境:vs2008, Use Unicode Character Set

  1. //----------------ANSI字符串转换为UNICODE字符串----------------------//   
  2.  
  3. // 待转换的数组   
  4. char szDCBparam[50] = {'0','1','\0'};   
  5.  
  6. // 计算需要的缓冲区大小   
  7. DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, szDCBparam, -1, NULL, 0);   
  8. // 分配存放转换后数据的缓冲区   
  9. wchar_t *pwText = new wchar_t[dwNum] ;   
  10. // 转换后的数据存放在pwText所指向的空间  
  11. if (!MultiByteToWideChar (CP_ACP, 0, szDCBparam, -1, pwText, dwNum))   
  12. {   
  13.     return;   
  14. }   
  15. // 注: 如果是char型数组转CString,直接使用CString szTest = CString(szDCBparam);
  16.  
  17.  
  18. //----------------UNICODE字符串转换为ANSI字符串----------------------//  
  19. //----------------将CString转为char型数组---------------------------//  
  20.  
  21. // 待转换的数据   
  22. CString szErrorInfo = _T("this is a test string!");   
  23.  
  24. // 保存错误信息的ANSI字符串的缓冲区,注意,缓冲区要足够大   
  25. char InfoString[100];   
  26.  
  27. // 转换后的数据存放在InfoString数组中  
  28. if (!WideCharToMultiByte(CP_ACP,0,LPCTSTR(szErrorInfo),-1,InfoString,100,NULL,NULL))   
  29. {   
  30.     return;   
  31. }   
  32.  
  33. //----------------将CString转为string----------------------//  
  34. CString cstr=_T("test");   
  35. std::string str = (CStringA)cstr;   
  36. // 注意,在vs2008下,使用std::string temp = cstr.GetBuffer(0)不行。
  37.  
  38. //----------------将string转为CString----------------------//  
  39. std::string strTest = "test";  
  40. CString cstrTest = CString(strTest.c_str());