char与wchart之间的转换.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
char与wchart之间的转换

char*与wchar_t*之间的转换1.问题描述char字符与wchar_t字符由于编码不同,所以在char*和wchar_t之间使用强制类型转换达不到正确转换字符串的目的。考察如下程序。#includeiostreamusingnamespace std;int main(){wchar_t* str=LABC我们;char* s=(char*)str;coutsendl;}输出结果出错:只输出A。经过强制类型转换,s指向了宽字符编码字符串,字符串数据没有发生任何变化,只是用多字节字符字符编码重新对它进行解释,自然输出的结果是错误的。2.char*与wchar_t*之间相互转换要想将宽字符编码字符串转换成多字节编码字符串(或者反过来),必须先读懂原来的字符串,然后再重新对它进行编码。只有这样才能到达转换的目的。由于宽字符可以表示多国语言的文字,因此,下文的讨论限于中文的宽字符串与多字节字符串之间的相互转换。在不同的才做系统上,有一些特殊的库函数可以用来进行字符编码之间的转换。在VC++中,其中关键的几个函数是setlocale()、wcstombs_s()和mbstowcs_s()。2.1关键函数简介(1)setlocale()功能:配置地域化信息头文件:#include locale.h函数原型:char *setlocale (int category, const char * locale);函数参数:category表示对本地化的某项内容进行设置,可取如下值:LC_ALL 包括下面的全部选项都要;LC_COLLATE 配置字符串比较;C_CTYPE 配置字符类别及转换,例如全变大写 strtoupper();LC_MONETARY 配置金融货币;LC_NUMERIC 配置小数点后的位数;LC_TIME 配置时间日期格式,与 strftime() 合用。locale表示本地域代号:如果为NULL,则返回当前的locale名称(一般为C);如果非空,则根据category和locale进行设置,如果成功,则返回新的locale名称(地域名称),如果失败,则返回 NULL。(2)wcstombs_s()功能:将宽字符编码字符串转换成多字节编码字符串头文件:#include stdlib.h函数原型:errno_t__cdecl wcstombs_s(size_t * _PtNumOfCharConverted, char * _Dst, size_t _DstSizeInBytes, constwchar_t * _Src, size_t _MaxCountInBytes);函数参数:PtNumOfCharConverted:指向转换后的字符串的长度加上结束符(单位字节);Dst:指向转换后的字符串首地址;DstSizeInBytes:目的地址最大字节空间(单位字节);_Src:源宽字符串首地址;_MaxCountInBytes:最多可存入多字节字符串缓冲最的字节数,用于裁剪转换后的字符串。返回值:成功返回0,失败则返回失败代码。(3)mbstowcs_s ()函数功能:将多字节编码字符串转换成宽字符编码字符串头文件:#include stdlib.h函数原型:errno_t__cdecl mbstowcs_s(size_t * _PtNumOfCharConverted, wchar_t * _DstBuf, size_t _SizeInWords, constchar * _SrcBuf, size_t _MaxCount );参数说明:PtNumOfCharConverted:指向转换后的字符串的长度加上结束符(单位wchar_t);_DstBuf:指向转换后的字符串首地址;_SizeInWords:目的地址最大字空间大小(单位wchar_t);_SrcBuf:源多字节字符串首地址;_MaxCount:最多可存入宽字符串缓冲中的字符个数,用于裁剪转换后的宽字符串。返回值:成功返回0,失败则返回失败代码。2.2转换实例#includeiostream#includelocale.h#includestringusingnamespace std;string ws2s(constwstring ws){size_t convertedChars=0;string curLocale=setlocale(LC_ALL,NULL); //curLocale=Csetlocale(LC_ALL,chs);constwchar_t* wcs=ws.c_str();size_t dByteNum=sizeof(wchar_t)*ws.size()+1;coutws.size():ws.size()endl;//5char*

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档