CString string 的相互转化,宽字符,多字符的转换

来源:互联网 发布:天津市软件学院答辩 编辑:程序博客网 时间:2024/04/27 22:15

在本文开始之处,先简要地说一下何为短字符和宽字符.
  所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码.(也就是我们常说的多字符集(普通的字符串就是这个))而宽字符

,顾名思义,就是用16bit表示的字符,典型的有UNICODE(MFC中的CString就是一个).关于windows下的ASCII和UNICODE的更多信息,

可以参考这两本经典著作:《windows 程序设计》,《windows 核心编程》.这两本书关于这两种字符都有比较详细的解说.


L表示long, P表示指针,C表示constant,W表示wide,T:win32环境中有一个_T宏,用来标识字符是否采用Unicode编码(两字节表示一个字符),若程序中定义了Unicode,该字符/字符串被作为Unicode字符串,否则就是标准的ANSI(单字节表示一个字符)字符串。

STR:表示这个变量是一个字符串。

1:LPTSTR = char*:
2:LPCSTR(多个C) 表示常字符串
3:LPTSTR (多个T) 表示取决于Unicode宏是否定义
4:LPCTSTR (多个C) 解释同2
5:LPWSTR 表示Unicode字符串(宽字符串)
6:LPCWSTR (多个C) 解释同2

 

一个例子,CString string 的相互转化

////string   到   CString  (短字符到宽字符)        CString strTemp1;string strTemp_1 = "sdddasdfasdf";int nLen = MultiByteToWideChar(CP_ACP, 0, strTemp_1.c_str(), -1, NULL, 0);MultiByteToWideChar(CP_ACP, 0, strTemp_1.c_str(), -1, strTemp1.GetBuffer(), nLen);////CString  到    string  (宽字符到多//字///符)CString strTemp1("sdddasdfasdf");string strTemp_1 ;DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, strTemp1.GetBuffer(), -1, NULL, 0, NULL, FALSE);WideCharToMultiByte(CP_OEMCP, NULL, strTemp1.GetBuffer(), -1,(LPSTR)strTemp_1.c_str(), dwNum, NULL, FALSE);


 

1)多字符(短字符跟多字符一个意思)转换宽多字符
   char sText[20] = {"多字节字符串!OK!"};/////多字符集(8bit)
我们需要知道转化后的宽字符需要多少个数组空间,

  所幸,我们能够确知所需要的数组空间.
  我们只需要将MultiByteToWideChar()的第四个形参设为-1,即可返回所需的短字符数组空间的个数:
  DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0);

   接下来,我们只需要分配响应的数组空间:
  wchar_t *pwText;
  pwText = new wchar_t[dwNum];
  if(!pwText)
  {
   delete []pwText;
  }
   接着,我们就可以着手进行转换了.在这里以转换成ASCII码做为例子:
  MultiByteToWideChar (CP_ACP, 0, pwText, -1, sText, dwSize);
 
  最后,使用完毕当然要记得释放占用的内存:
  delete []pwText;

(2)宽字符集转换为多字符集(短字符跟多字符一个意思)
  wchar_t wText[20] = {L"宽字符转换实例!OK!"};
  DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL, wText,-1,NULL,0,NULL,FALSE);
  char *psText;
  psText = new char[dwNum];
  if(!psText)
  {
   delete []psText;
  }
  WideCharToMultiByte (CP_OEMCP,NULL,wText,-1,psText,dwNum,NULL,FALSE);
  delete []psText;

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 家具环保不达标怎么办 买到坏了的食物怎么办 空调检测不合格的怎么办 淘宝卖精仿遇到打假怎么办? 没有收到提货码怎么办 增值税发票超过180天怎么办 花呗借钱还不上怎么办 实体店里没人气怎么办 EMS快件无人签收怎么办 邮政快递丢失了怎么办 快递手机丢了怎么办 拍照签收没收到怎么办 拼多多开店货源怎么办 被购买鉴定投诉怎么办 淘宝上买东西错想用花呗怎么办 淘宝想用花呗买东西差一点怎么办 买了假货怎么办还用吗 免税店买完东西怎么办 淘宝恶意拍单怎么办 二手西服不想要怎么办 苹果8p费电快怎么办 赌博被骗没证据怎么办 异地车子办保险怎么办 淘宝买到旧货怎么办 苹果官网买手机发票怎么办 车子异地换牌照怎么办 汽车异地上保险怎么办 后悔买保险了怎么办 平安run不计步怎么办 天梭力洛克有划痕怎么办 天梭手按钮坏了怎么办 天梭机械表总慢怎么办 买的天梭表没电了怎么办 天猫遇见假货怎么办 苹果六s内存不足怎么办 发票丢了报销怎么办 荣耀v9玩游戏卡怎么办 无极限不退货怎么办 高中想买手机怎么办 发票搞丢了怎么办 买车发票丢失怎么办