当前位置: 首页 > news >正文

MFC中MultiByteToWideChar和WideCharToMultiByte

MultiByteToWideChar

作用:
可以映射一个字符串到一个宽字节(Unicode) 的字符串 .由该函数映射的字符串没必要是多字节字符组。

函数原型:

int
WINAPI
MultiByteToWideChar(_In_ UINT CodePage,_In_ DWORD dwFlags,_In_NLS_string_(cbMultiByte) LPCCH lpMultiByteStr,_In_ int cbMultiByte,_Out_writes_to_opt_(cchWideChar,return) LPWSTR lpWideCharStr,_In_ int cchWideChar);

参数:

  1. //指定要转换成的字符集代码页
  2. //flags一般设置为0
  3. //要转换的字符串
  4. //要转换字符串的长度,-1表示转换到字符串结尾。返回原字符串长度。0 作为结束符的字符串
  5. //接收转换后输出的宽字符串的缓冲,如果为 NULL, 就是代表计算生成的字符串的长度。
  6. //缓冲区大小

返回值:
如果函数运行成功,并且cchWideChar不为0,返回值是由lpWideCharStr指向的缓冲区中写入的宽字符数;如果函数运行成功,并且cchMultiByte为0,返回值是待转换字符串的缓冲区所需求的宽字符数大小。(此种情况用来获取转换所需的wchar_t的个数)如果函数运行失败,返回值为零。


## WideCharToMultiByte
**作用:**
该函数映射一个unicode字符串到一个多字节字符串。 **函数原型:**```cpp
int
WINAPI
MultiByteToWideChar(_In_ UINT CodePage,_In_ DWORD dwFlags,_In_NLS_string_(cbMultiByte) LPCCH lpMultiByteStr,_In_ int cbMultiByte,_Out_writes_to_opt_(cchWideChar,return) LPWSTR lpWideCharStr,_In_ int cchWideChar);

参数:

  1. //指定执行转换的代码页
  2. //flags一般设置为0
  3. //要转换的字符串
  4. // 待转换的宽字符串。
  5. // 待转换宽字符串的长度,-1表示转换到字符串结尾
  6. //接收转换后输出新串的缓冲区。
  7. // 输出缓冲区大小,如果为0,lpMultiByteStr将被忽略,函数将返回所需缓冲区大小而不使用lpMultiByteStr。
  8. //指向字符的指针, 在指定编码里找不到相应字符时使用此字符作为默认字符代替。如果为NULL则使用系统默认字符。
  9. //开关变量的指针,用以表明是否使用过默认字符。对于要求此参数为NULL的dwFlags而使用此参数,函数将失败返回并设置错误码ERROR_INVALID_PARAMETER。lpDefaultChar和lpUsedDefaultChar都设为NULL,函数会更快一些。

返回值:
如果函数成功,且cbMultiByte非0,返回写入lpMultiByteStr的字节数(包括字符串结尾的null);cbMultiByte为0,则返回转换所需 字节数。函数失败,返回0。

补充:
第一个参数常用的是CP_ACP和CP_UTF8了,前者将宽字符转换为ANSI,后者转换为UTF8。
其他的字符集代码页:
CP_ACP
ANSI代码页

CP_MACCP
Macintosh代码页

CP_OEMCP
OEM代码页

CP_SYMBOL
符号代码页(42)

CP_THREAD_ACP
当前线索ANSI代码页

CP_UTF7
使用UTF-7转

CP_UTF8
使用UTF-8转换

综合例子

void CMFCApplication1Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码#define MAX 100char c[MAX] = { 0 };WCHAR wc[MAX] = { 0 };char utf8[MAX] = { 0 };sprintf(c, "hello");int mi = MultiByteToWideChar(CP_ACP, 0, c, -1, wc, MAX); //多字节转换成宽字节int wi = WideCharToMultiByte(CP_UTF8, 0, wc, -1, utf8, MAX, NULL, NULL); //宽字节转换成多字节CString str;str.Format("mi = %d\t wi =%d\n", mi, wi); //格式化字符OutputDebugString(str);		//输出调试信息

运行结果:
在这里插入图片描述

http://www.xdnf.cn/news/829243.html

相关文章:

  • 图文讲解flashfxp教程 flashfxp详细教程
  • Windows计划任务
  • Petri网的介绍
  • LeapMotion 简介
  • vi / gvim编辑器的基本使用
  • USRP简介
  • 启动应用程序出现ws2_32.dll找不到问题解决
  • 微PE安装使用教程(非常详细)从零基础入门到精通,看完这一篇就够了
  • Flutter中AspectRatio、Card 卡片组件
  • 【设计模式】叩心自问:什么是设计模式? 设计模式的目的是什么?设计模式依据哪些(七种)原则设计的?设计模式有哪些?分类?
  • Linux下安装QQ
  • 网络安全常见十大漏洞总结(原理、危害、防御)_网络安全常见漏洞类型_漏洞基本原理
  • 基础SQL语法语句大全(一篇学会所有SQL语句)
  • Protocol buffers基础
  • 逻辑推理:张老师的生日
  • SEO与SEM区别是什么
  • 人脸识别各算法详解
  • WinForm(一) WinForm入门与基本控件使用
  • DSP-EALLOW和EDIS
  • 【计算机网络】第三章--数据链路层
  • 【HeadFirst 设计模式】你看过《HeadFirst Design Pattern》了吗?(菜鸟晋升必经之路)
  • C语言【指针】函数指针和指针函数用法和区别
  • AGPS(辅助全球卫星定位系统)
  • 这些机房规划技巧,老网工都不舍得公开
  • android使用sharesdk第三方分享
  • 【C语言】C语言函数详解:从基础到高级,掌握函数的使用技巧和常见问题解析
  • sin60度 用计算机,cos60度等于多少啊
  • Java概念
  • Android最全UI库合集
  • C语言爱心代码大全集—会Ctrl+C就可以表白了