VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 912|回复: 24

《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换

[复制链接]
51_avatar_middle
online_admins 发表于 2018-12-16 00:20:16 | 显示全部楼层 |阅读模式
1、为什么要进行转换?
既然宽窄字节字符串各自的基本使用都给大家讲解完了,那么本节课开始呢,就给大家讲解下如何进行宽窄字节字符串的转换。
之前跟大家说过,并不是建议程序中所有的字符串都用宽字节的Unicode来表示,比如网络发送的字符串就可以用窄字节的,当对方收到之后默认收到的是窄字节的,因为对方的程序可能用宽字节Unicode来写的界面,所以要显示的时候就要转换成Unicode宽字节的字符串。这样就涉及到宽窄字节的转换,类似的情况很常见,所以本节课重点讲解下!

2、使用微软提供的API函数来实现宽窄字节的转换:
WideCharToMultiByte 实现宽字节转换到窄字节
MultiByteToWideChar 实现窄字节转换到宽字节

WideCharToMultiByte 的代码页用来标记与新转换的字符串相关的代码页;
MultiByteToWideChar 的代码页用来标记与一个多字节字符串相关的代码页,

[1]、常用的代码页有 CP_ACP 和 CP_UTF8 两个:
使用 CP_ACP 代码页就实现了 ANSI 与 Unicode 之间的转换;--- 我们所用的!
使用 CP_UTF8 代码页就实现了 UTF-8 与 Unicode 之间的转换,在网页中经常会用到UTF8编码的格式。

[2]、dwFlags 参数允许我们进行额外的控制,但是,一般情况下都不使用这个标志,直接传递 0 就行了。

[3]、lpDefaultChar和pfUsedDefaultChar:只有当WideCharToMultiByte函数遇到一个宽字节字符,而该字符在uCodePage参数标识的代码页中并没有它的表示法时,WideCharToMultiByte函数才使用这两个参数。如果宽字节字符不能被转换,该函数便使用lpDefaultChar参数指向的字符。如果该参数是NULL(这是大多数情况下的参数值),那么该函数使用系统的默认字符。该默认字符通常是个问号。这对于文件名来说是危险的,因为问号是个通配符。pfUsedDefaultChar参数指向一个布尔变量,如果Unicode字符串中至少有一个字符不能转换成等价多字节字符,那么函数就将该变量置为TRUE。如果所有字符均被成功地转换,那么该函数就将该变量置为FALSE。当函数返回以便检查宽字节字符串是否被成功地转换后,可以测试该变量。

● 两个转换函数的使用举例:见附件!

注意:使用过后千万别忘记释放返回的指针空间。
具体代码的讲解详见视频教程!

3、使用ATL提供的 CA2W、CW2A、CT2W、CT2A 来更方便的转换:
之前在《VC++基础班》中曾给大家讲解过 A2W、W2A、T2A、T2W 之类的宏也可以方便的转换,但是这几个宏出现的时间比较早,如果字符串很长的话就会有问题,所以这里面不再建议大家使用了。介绍给大家更为方便和安全的 CA2W、CW2A、CT2W、CT2A 封装类来给大家使用。

具体怎么样来用,给大家演示一下:见附件!

4、小作业:
熟练使用API方式及CA2W、CW2A、CT2W、CT2A类方式进行宽窄字符串的转换。多加练习才行!

备注:相关课程细节及演示详见视频教程!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av38413272/?p=3
MP4高清视频下载地址:链接:https://pan.baidu.com/s/15YjvEw7TwwzeCaJe9uhUoA 提取码:on3z
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:《实用VC编程之玩转字符串》第2课:宽窄字节字符串的使用
下一篇:《实用VC编程之玩转字符串》第4课:CString的方便之处及优缺点
81_avatar_middle
在线会员 发表于 2018-12-16 09:55:49 | 显示全部楼层
感谢楼主的经验分享。。。。
08_avatar_middle
在线会员 发表于 2018-12-16 10:47:54 | 显示全部楼层
《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换
87_avatar_middle
在线会员 发表于 2018-12-16 13:00:15 | 显示全部楼层
谢谢老大分享
87_avatar_middle
在线会员 发表于 2018-12-16 13:01:55 | 显示全部楼层
本帖最后由 cqzj70 于 2018-12-16 13:14 编辑

老大这几个转换类有内存泄漏的嫌疑吗?
69_avatar_middle
在线会员 发表于 2018-12-16 20:18:22 | 显示全部楼层
《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换谢谢楼主分享
10_avatar_middle
在线会员 发表于 2018-12-17 16:21:12 | 显示全部楼层
老大出品,必属精品,支持。
04_avatar_middle
online_vip 发表于 2018-12-19 21:37:17 | 显示全部楼层
真的很好,学习了
78_avatar_middle
在线会员 发表于 2018-12-20 08:39:38 | 显示全部楼层
感谢楼主分享。
95_avatar_middle
在线会员 发表于 2018-12-21 08:35:59 | 显示全部楼层
感谢老大的分享
21_avatar_middle
在线会员 发表于 2018-12-22 11:25:35 | 显示全部楼层
感谢syc老大分享。
87_avatar_middle
online_vip 发表于 2018-12-24 11:16:11 | 显示全部楼层
的代码页用来标记与新转换的字符串相关的代码页
01_avatar_middle
online_vip 发表于 2018-12-29 10:23:17 | 显示全部楼层
老大出品,必属精品
49_avatar_middle
在线会员 发表于 2018-12-31 09:56:15 | 显示全部楼层
学习学习............
22_avatar_middle
在线会员 发表于 2018-12-31 20:37:36 | 显示全部楼层
《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换《实用VC编程之玩转字符串》第3课:宽窄字节字符串的转换
09_avatar_middle
在线会员 发表于 2018-12-31 23:35:35 | 显示全部楼层
宽窄字节字符串的转换
61_avatar_middle
在线会员 发表于 2019-1-2 01:35:13 | 显示全部楼层
谢谢老大分享!
89_avatar_middle
在线会员 发表于 2019-1-15 19:05:03 | 显示全部楼层
看看示例代码
98_avatar_middle
在线会员 发表于 2019-2-23 10:02:16 | 显示全部楼层
感谢分享


40_avatar_middle
在线会员 发表于 2019-2-26 08:22:49 | 显示全部楼层
谢谢分享!!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-26 11:34

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表