C++宽字符与普通字符的转换实例详解

 更新时间:2017年06月15日 10:45:13   投稿:lqh  
这篇文章主要介绍了C++宽字符与普通字符的转换实例详解的相关资料,需要的朋友可以参考下

C++宽字符与普通字符的转换实例详解

把字符串转换成宽字符串,

实例代码:

wstring string2Wstring(string sToMatch) 
{   
#ifdef _A_WIN 
  int iWLen = MultiByteToWideChar( CP_ACP, 0, sToMatch.c_str(), sToMatch.size(), 0, 0 ); // 计算转换后宽字符串的长度。(不包含字符串结束符) 
  wchar_t *lpwsz = new wchar_t [iWLen + 1]; 
  MultiByteToWideChar( CP_ACP, 0, sToMatch.c_str(), sToMatch.size(), lpwsz, iWLen ); // 正式转换。 
  lpwsz[iWLen] = L'/0';  
  wstring wsToMatch(lpwsz); 
  delete []lpwsz; 
#elif _A_LINUX 
  setlocale( LC_CTYPE, "" ); // 很重要,没有这一句,转换会失败。 
  int iWLen = mbstowcs( NULL, sToMatch.c_str(), sToMatch.length() ); // 计算转换后宽字符串的长度。(不包含字符串结束符) 
  wchar_t *lpwsz = new wchar_t[iWLen + 1]; 
  int i = mbstowcs( lpwsz, sToMatch.c_str(), sToMatch.length() ); // 转换。(转换后的字符串有结束符) 
  wstring wsToMatch(lpwsz); 
  delete []lpwsz; 
#endif 
  return wsToMatch; 
} 
//把宽字符串转换成字符串,输出使用 
string wstring2string(wstring sToMatch) 
{   
#ifdef _A_WIN 
  string sResult; 
  int iLen = WideCharToMultiByte( CP_ACP, NULL, sToMatch.c_str(), -1, NULL, 0, NULL, FALSE ); // 计算转换后字符串的长度。(包含字符串结束符) 
  char *lpsz = new char[iLen]; 
  WideCharToMultiByte( CP_OEMCP, NULL, sToMatch.c_str(), -1, lpsz, iLen, NULL, FALSE); // 正式转换。 
  sResult.assign( lpsz, iLen - 1 ); // 对string对象进行赋值。 
  delete []lpsz; 
#elif _A_LINUX 
  int iLen = wcstombs( NULL, sToMatch.c_str(), 0 ); // 计算转换后字符串的长度。(不包含字符串结束符) 
  char *lpsz = new char[iLen + 1]; 
  int i = wcstombs( lpsz, sToMatch.c_str(), iLen ); // 转换。(没有结束符) 
  lpsz[iLen] = '/0'; 
  string sResult(lpsz); 
  delete []lpsz; 
#endif 
  return sResult; 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • C++中命名空间的概念及使用详解

    C++中命名空间的概念及使用详解

    这篇文章主要介绍了C++中命名空间的概念及使用详解,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字就是针对这种问题而出现的,需要的朋友可以参考下
    2023-08-08
  • C语言在屏幕上输出杨辉三角

    C语言在屏幕上输出杨辉三角

    这篇文章主要介绍了在屏幕上输出杨辉三角的方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • c++ 写注册表方式让程序开机自启动

    c++ 写注册表方式让程序开机自启动

    这篇文章主要介绍了c++ 写注册表方式让程序开机自启动,需要的朋友可以参考下
    2017-09-09
  • 关于Qt添加opencv和libtorch库的问题

    关于Qt添加opencv和libtorch库的问题

    这篇文章主要介绍了Qt添加opencv和libtorch库的相关知识,两种方法一种是通过手动添加,一种是通过qt creator添加,需要的朋友可以参考下
    2022-01-01
  • C语言编程时常犯十八个错误小结

    C语言编程时常犯十八个错误小结

    C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误
    2013-07-07
  • C语言实现简易扫雷小游戏

    C语言实现简易扫雷小游戏

    这篇文章主要为大家详细介绍了C语言实现简易扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C++中实现矩阵的加法和乘法实例

    C++中实现矩阵的加法和乘法实例

    这篇文章主要介绍了C++中实现矩阵的加法和乘法实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • C++如何将运行结果保存到txt中

    C++如何将运行结果保存到txt中

    这篇文章主要介绍了C++如何将运行结果保存到txt中问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C语言深入分析数组指针和指针数组的应用

    C语言深入分析数组指针和指针数组的应用

    在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活
    2022-04-04
  • C++中链表操作实例分析

    C++中链表操作实例分析

    本文给大家分享了个人对于C++中链表操作的理解,并对具体实例进行了分析,是篇非常不错的学习链表操作的文章,希望大家能够喜欢
    2017-07-07

最新评论