找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2|回复: 0

[图文教程] 炫语言之玩转字符串003-宽窄字节字符串的转换

[复制链接]

9

主题

9

回帖

61

积分

超级版主

积分
61
发表于 27 分钟前 | 显示全部楼层 |阅读模式
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。当函数返回以便检查宽字节字符串是否被成功地转换后,可以测试该变量。

注意:使用过后千万别忘记释放返回的指针空间。
这里炫语言已经帮我们封装好了,新手直接使用就好
文本型  A2W_(常量 字符型A* Ansi文本, 整型 长度 = -1)//将Ansi转成Unicode
文本型A  W2A_(常量 字符型* Unicode文本指针, 整型 长度 = -1)//将Unicode转成Ansi


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|炫彩界面库 | 炫语言 ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-5-18 15:00 , Processed in 0.092313 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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