




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用MultiByteToWideChar和WideCharToMultiByte的详细说明注意:这两个函数是Windows提供的转换函数,没有通用性c语言中提供的转换函数为mbstowcs()/wcstombs()一、函数的简要介绍相关头文件:包含函数的头文件:windows.h#includeWchar_t类型所需的头文件:wchar.h#include(1) MultiByteToWideChar()函数功能:此函数是将字符串映射为宽字符(unicode)的字符串。此函数映射的字符串不必是多字节字符组。函数原型:Int MultiByteToWideChar(UINT CodePage、DWORD dwFlags、LPCSTR lpMultiByteStr、Int cchMultiByte、LPWSTR lpWideCharStr、Int cchWideChar);参数:1 CodePage:指定要用于执行转换的多字节字符的字符集此参数可以是系统上安装的值,也可以是指定给任何有效字符集的值。也可以指定以下值之一:值DescriptionCP_ACPAnsi代码页CP_MACCPNot supportedCP_OEMCPOem代码页CP_SYMBOLNot supportedCP_THREAD_ACPNot supportedCP_UTF7UTF-7代码页CP_UTF8UTF-8代码页2 dwFlags:一组位元标记,指示未转换成预先建立的字元或宽字元(如果复合格式存在)、使用图像(glyph)而非控制字元,以及如何处理无效字元。您可以指定标签常数的组合,如下所示:MB_PRECOMPOSED:通常使用预先建立的字元。也就是说,包含一个基本字符和一个非空字符的字符只有一个字符值。这是默认转换选择。不能与MB_COMPOSITE值一起使用。MB_COMPOSITE:通常使用组合字母。也就是说,基本字符和非空格字符组成的字符具有不同的字符值。不能与MB_PRECOMPOSED值一起使用。MB_ERR_INVALID_CHARS:函数遇到无效的输入字符时不运行,GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。MB_USEGLYPHCHARS:使用字形而不是控制字符。组合字母由一个基本字符和一个非空字符组成,每个字符都有不同的字符值。每个预先创建的字符都具有默认/非空字符配置的单个字符值。在字符中,e是基本字符,重音标记是非空字符。MB_PRECOMPOSED和MB_COMPOSITE标签互斥,而MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS标签可以独立于其它标签进行设置。通常不使用这些标志,因此当值为零时使用。3lpmultibyteastr:指向要转换的字符串的缓冲区。4 cchMultiByte:指定lpMultiByteStr参数指向的字符串中的字节数。可以设置为-1,自动确定LpMultiByteStr指定的字符串的长度(如果字符串不是以空字符中断,则设置为-1可能失败,也可能成功)如果将此参数设置为0,则函数失败。5 lpWideCharStr:指向接收已转换字符串的缓冲区。6 cchWideChar:指定lpWideCharStr参数指向的缓冲区中的宽字节数。如果该值为0,则函数返回目标缓存lpWideChatStr所需的大字符数,而不执行转换。返回值:如果函数运行成功,并且cchWideChar非零,则返回值是lpWideCharStr指向的缓冲区中记录的大字符数。如果函数运行成功,且cchMultiByte为0,则返回值是要转换的字符串的缓冲区所需的大字符数大小。用于获取转换所需的wchar_t数如果函数执行失败,则返回值为0。若要查看详细的错误信息,请调用GetLastError()函数。返回下面列出的错误代码。Error _ insufficient _ bufferError _ invalid _ flagsError _ invalid _ parameterERROR_NO_UNICODE_TRANSLATION。(2) WideCharToMultiByte()函数功能:此函数将unicode字符串映射到多字节字符串。函数原型:Int WideCharToMultiByte(UINT CodePage、DWORD dwFlags、LPCWSTR lpWideCharStr、Int cchWideChar、LPSTR lpMultiByteStr、Int cchMultiByte、LPCSTR lpDefaultChar、LPBOOL pfUsedDefaultChar);参数:与MultiByteToWideChar()函数的参数类似,但具有更多的两个参数:LpDefaultChar和pfUsedDefaultChar:仅当WideCharToMultiByte函数在由uCodePage参数标识的代码页中遇到没有相应表示的单个宽字节字符时,WideCharToMultiByte函数才使用这两个参数。(通常使用空值)如果无法转换单宽字节字符,则此函数使用lpDefaultChar参数指向的字符。如果参数为NULL(大多数情况下为参数值),则函数使用系统的基本字符。此默认字符通常是问号。问号是通配符,因此文件名可能有风险。2 pfUsedDefaultChar参数是指在unicode字符串中,如果一个或多个字符不能转换为等效的多字节字符,则设置为TRUE的布尔变量。成功转换所有字符后,函数将其变量设置为FALSE。函数返回以确保成功转换宽字节字符串后,可以测试变量。返回值:如果函数运行成功,且cchMultiByte非零,则返回值是lpMultiByteStr指向的缓冲区中写入的字节数。函数成功运行且cchMultiByte为0时,返回值是接收要转换的字符串的缓冲区所需的字节数。用于获取转换所需的Char数如果函数执行失败,则返回值为0。要查看详细的错误信息,请调用GetLastError函数。返回下面列出的错误代码。Error _ insufficient _ bj fferError _ invalid _ flagsError _ invalid _ parameterERROR_NO_UNICODE_TRANSLATION。二、使用方法(1)将多字节字符串转换为宽字符串:1)调用MultiByteToWideChar()函数,并将cchWideChar参数设置为0(以获取转换所需的接收缓冲区大小)。2)使用cchMultiByte的值获取输入缓存的大小。(这可以节省空间,也可以为cchMultiByte获取值-1(字符串必须以空字符结束,否则会出错)3)分配足够的内存块以存储转换的unicode字符串。此内存块的大小由cchWideChar()函数以前的返回值确定。(您也可以使用其他方法,但此方法可以节省更多内存。)4)再次调用MultiByteToWideChar()函数,这次将缓存的地址传递给lpWideCharStr,将第一次调用multibyteadechar()函数时的返回值作为cchWideChar参数的值传递。5)使用转换后的字符串;6)释放接收缓冲区占用的内存块。范例程式码:cpp view plaincopy1.voidmain()2.3.charsBuf25= 0 ;4.Strcpy (sbuf,我是最好的);6.7./获取输入缓存大小8.ints bufsize=str len(sBuf);9./获取输出缓存大小10./VC默认使用ANSI,因此第一个参数是CP_ACP11.dwordd bufsize=multibyteatowidchar(CP _ ACP,0,sbuf,s bufsize,null,0);12.printf(需要 wchar _ t % u n ,db ufsize);13.14.wchar _ t * dbuf=new wchar _ td bufsize;15.wmemset(dBuf,0,d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校内活动安全知识培训课件
- 医学基础知识常考题(含答案)
- 2025年雇佣执行经理合同范本
- 医疗器械法规知识培训试题及答案(单体药店或连锁门店)
- 2025年VTE、伤口造口相关知识培训后考核试题及答案
- 树木寻访记探究课件
- 2025年山西省保密知识教育考试题(含答案)
- 2024年设备监理师之设备监理合同练习题一及答案
- 2024年事业单位考试南京A类《职业能力倾向测验》高分冲刺试题含解析
- 标点符号的争吵课件
- 承诺协议书模板
- 公务用车安全教育培训
- 销售人员心态培训销售心态培训
- 志愿服务与志愿者精神知识考试题库大全(含答案)
- 养老机构入住护理、风险评估表、计划表、记录、告知书等健康档案护理记录模板
- 2024-2025年上海中考英语真题及答案解析
- 科技成果鉴定证书格式模板
- 人教版小学数学2年级下册课时练无答案+单元测试题+期中期末检测卷(含答案)
- 西南大学2022-2023学年本科教学质量报告
- 督灸技术课件
- 高效的物业服务管理团队
评论
0/150
提交评论