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函数
相关新闻
- 2023-04-16 2台电脑怎么共享(2台电脑怎么共享
- 2023-04-16 主板检测卡代码(电脑主板检测卡代
- 2023-04-16 dnf未响应(dnf未响应老是上不去)
- 2023-04-16 ppoe(pppoe拨号上网)
- 2023-04-16 网速不稳定(网速不稳定是路由器的
- 2023-04-16 wds状态(Wds状态成功)
- 2023-04-16 光标键(光标键不动了怎么办)
- 2023-04-16 电脑提速(电脑提速100倍的方法)
- 2023-04-16 切换用户(切换用户怎么切换回来
- 2023-04-16 数据包是什么(产品数据包是什么
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
