VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 619|回复: 1

[技术文章] CString&CStringA&CStringW之间的相互转换

[复制链接]
29_avatar_middle
online_vip CDocking 发表于 2018-4-3 16:59:40 | 显示全部楼层 |阅读模式
在做MFC编程的时候,时常会碰到CString、CStringA、CStringW之间相互转换的问题,也即chat字符串与wchar_t字符串相互转换的问题。

在网上找到一些它们之间相互转换的函数,代码如下:

头文件CStringToolEx.h
  1. #ifndef _CSTRING_TOOL_EX_
  2. #define _CSTRING_TOOL_EX_

  3. #include <cstringt.h>

  4. //
  5. // CString转CStringA
  6. //
  7. #ifndef CStrT2CStrA
  8. #ifdef _UNICODE
  9. #define CStrT2CStrA(cstr) CStrW2CStrA((cstr))
  10. #else
  11. #define CStrT2CStrA(cstr) (cstr)
  12. #endif
  13. #endif

  14. //
  15. // CString转CStringW
  16. //
  17. #ifndef CStrT2CStrW
  18. #ifdef _UNICODE
  19. #define CStrT2CStrW(cstr) (cstr)
  20. #else
  21. #define CStrT2CStrW(cstr) CStrA2CStrW((cstr))
  22. #endif
  23. #endif

  24. //
  25. // CStringA转CString
  26. //
  27. #ifndef CStrA2CStrT
  28. #ifdef _UNICODE
  29. #define CStrA2CStrT(cstr) CStrA2CStrW((cstr))
  30. #else
  31. #define CStrA2CStrT(cstr) (cstr)
  32. #endif
  33. #endif

  34. //
  35. // CStringW转CString
  36. //
  37. #ifndef CStrW2CStrT
  38. #ifdef _UNICODE
  39. #define CStrW2CStrT(cstr) (cstr)
  40. #else
  41. #define CStrW2CStrT(cstr) CStrW2CStrA((cstr))
  42. #endif
  43. #endif

  44. //
  45. // CStringA转CStringW
  46. //
  47. CStringW CStrA2CStrW(const CStringA &cstrSrcA);

  48. //
  49. // CStringW转CStringA
  50. //
  51. CStringA CStrW2CStrA(const CStringW &cstrSrcW);

  52. #endif
复制代码


源文件CStringToolEx.cpp
  1. #include "stdafx.h"
  2. #include "CStringToolEx.h"
  3. #include <cstringt.h>

  4. //
  5. // CStringA转CStringW
  6. //
  7. CStringW CStrA2CStrW(const CStringA &cstrSrcA)
  8. {
  9.     int len = MultiByteToWideChar(CP_ACP, 0, LPCSTR(cstrSrcA), -1, NULL, 0);
  10.     wchar_t *wstr = new wchar_t[len];
  11.     memset(wstr, 0, len*sizeof(wchar_t));
  12.     MultiByteToWideChar(CP_ACP, 0, LPCSTR(cstrSrcA), -1, wstr, len);
  13.     CStringW cstrDestW = wstr;
  14.     delete[] wstr;

  15.     return cstrDestW;
  16. }

  17. //
  18. // CStringW转CStringA
  19. //
  20. CStringA CStrW2CStrA(const CStringW &cstrSrcW)
  21. {
  22.     int len = WideCharToMultiByte(CP_ACP, 0, LPCWSTR(cstrSrcW), -1, NULL, 0, NULL, NULL);
  23.     char *str = new char[len];
  24.     memset(str, 0, len);
  25.     WideCharToMultiByte(CP_ACP, 0, LPCWSTR(cstrSrcW), -1, str, len, NULL, NULL);
  26.     CStringA cstrDestA = str;
  27.     delete[] str;

  28.     return cstrDestA;
  29. }
复制代码


使用示例:
  1. CString  cstrName = TEXT("Hello Kitty");
  2.     CStringA cstraName = CStrT2CStrA(cstrName);   //CString to CStringA
  3.     CStringW cstrwName = CStrT2CStrW(cstrName);   //CString to CStringW
  4.     ::MessageBoxA(NULL, cstraName, "CStringToolEx Test", MB_OK);
  5.     ::MessageBoxW(NULL, cstrwName, L"CStringToolEx Test", MB_OK);

  6.     CStringA cstraAddr = "Anhui Anqing";
  7.     CString  cstrAddr  = CStrA2CStrT(cstraAddr);    //CStringA to CString
  8.     CStringW cstrwAddr = CStrA2CStrW(cstraAddr);    //CStringA to CStringW
  9.     ::MessageBox(NULL, cstrAddr, TEXT("CStringToolEx Test"), MB_OK);
  10.     ::MessageBoxW(NULL, cstrwAddr, L"CStringToolEx Test", MB_OK);

  11.     CStringW cstrwGender = L"Male";
  12.     CString  cstrGender  = CStrW2CStrT(cstrwGender);   //CStringW to CString
  13.     CStringA cstraGender = CStrW2CStrA(cstrwGender);   //CStringW to CStringA
  14.     ::MessageBox(NULL, cstrGender, TEXT("CStringToolEx Test"), MB_OK);
  15.     ::MessageBoxA(NULL, cstraGender, "CStringToolEx Test", MB_OK);
复制代码




上一篇:book118免费下载文档方法
下一篇:三流程序员如何成为年薪50W架构师

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-4-3 17:20:01 | 显示全部楼层
嗯,这个还是不错的,收藏了,以后备用!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-11 02:48

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表