U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 常见问题解答 >

C++宽窄字符转换与输出

来源:http://www.tudoupe.com时间:2022-02-28

系列文章目录

1.C++实现爬虫!

文章目录

  • 系列文章目录
  • 前言
  • 一、什么是宽字节?什么是窄字节?
  • 二、宽窄字节之间的转化方法
    • 1.Windows API进行转化
    • 2.C/C++库函数转换
  • 三.解决VS控制台无法输出宽字符问题

前言

如果是C/C++程序员,对于VS应该是不陌生的,可谓是C/C++程序手中的利器

但如果稍微深入学习就会发现,windows API大部分都是分为宽字节与窄字节的,比如常见的MessageboxA与MessageBoxW函数,这时候就会出现很多问题,最常见的便是乱码

需要注意的是,WIndows底层函数均采用的是宽字节,即使你使用的是char,程序真正执行的时候,还是会在底层将char转化为wchar_t,这就意味着使用窄字节效率是比不上宽字节的

同时需要知道.wchar_t是支持多个国家语言的,而char只支持本国语言.

一、什么是宽字节?什么是窄字节?

认识宽窄字节最好的办法就是动手实验一下
在这里插入图片描述
可以看到,最直接的影响就是大小,char只占一个字节,而wchar_t要占两个字节,并且需要在字符串前加L才表示是宽字节

其实还有很多细节,比如这里是使用的字符c,如果是使用的汉字,还能正常使用吗?很多问题需要自己碰到并解决,最后才能是自己的东西

二、宽窄字节之间的转化方法

1.Windows API进行转化

头文件:

用到的函数

窄字节转宽字节:

宽字节转窄字节:

一般宽字符是窄字符字节长度的两倍,但也有可能出现意外情况,或者不想自己计算需要多大的缓冲,则可以调用两次该函数,第一次返回需要的大小,第二次进行转换

下面是我封装的两个函数,可直接使用,但需要自己delete内存,可以自己使用wstring和string进行替换

窄字节转宽字节:

宽字节转窄字节

2.C/C++库函数转换

用到的头文件:

用到的函数:

设置地域,当试图转换中文时,需要设置,否则为乱码

标准窄转宽:

使用:

标准宽转窄:

使用:

安全函数窄转宽:

使用:

安全函数宽转窄:

使用:

大家可能看到,我有时使用了setlocal,有时没有使用,这个可以根据具体情况而定,如果出现中文无法转化的情况,就要考虑使用这个函数了

而且我都没有接收转化字符个数,也就是第一个参数,如果需要准确接受转化成功字符的个数,就必须要使用setlocal函数

可能大家还看到过_wcstombs_s_l等函数,这个函数还需要_create_locale与 _free_locale函数配合使用,考虑下来,过于麻烦,不如上面的几种转化方法,所以便不予讲解,大家有心曲可以去查看官网说明,链接在此
函数说明 设置本地说明

三.解决VS控制台无法输出宽字符问题

方法一:直接使用printf函数:

方法二:使用setlocal与wcout

方法三:使用WriteConsoleW函数

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息