C语言中宽字符/宽字符串的输入输出(wchar_t和wprintf)

char在C/C++中只占一个字节,通常只用来处理ASCII码,所以不能用来存放汉字等象形文字。通常我们使用Unicode字符集(万国码),支持全球的语言文化。utf-16足以存放全球常用的字符,所以在微软的编译器中,使用2个字节来存储字符,而在其他编译器中,比如GCC和LLVM/Clang采用utf-32来存放字符,占4个字节。使用两个字节存储的另外一个好处是可以节省内存,而使用四个字节会浪费 50% 以上的内存。
处理方法: C语言中使用了一个新的类型,叫做wchar_t,w 是 wide 的首字母,t 是 type 的首字符,wchar_t 的意思就是宽字符类型。wchar_t的长度由编译器决定,就是上面说到的那样,微软编译器下是2个字节,等价于unsigned short,其他编译器是4个字节,相当于unsigned int 。wchar_t位于wchar.h头文件中
wchar_t 其实是用 typedef 关键字定义的一个别名。

wchar_t a = L'A';  //英文字符(基本拉丁字符)
wchar_t b = L'9';  //英文数字(阿拉伯数字)
wchar_t c = L'中';  //中文汉字

宽字符的输出

putchar和printf都只能输出不加L的窄字符,输出宽字符串可以使用 <wchar.h> 头文件中的 putwchar 和 wprintf 函数,wprintf 对应的格式控制符是%lc。
在输出宽字符之前还要使用 setlocale 函数进行本地化设置,setlocale 函数位于 <locale.h> 头文件中,初始化语句为

setlocale(LC_ALL, "zh-CN");//将本地环境设置为简体中文。
putchar(a);
wprintf(L"%lc",b);

字符串

给字符串前面加上L就变成了宽字符串,输出使用wprintf 函数,对于的格式控制为%ls 。

wchar_t a[] = L"我爱中国";
wchar_t *b= L"我爱中国";
setlocale(LC_ALL, "zh-CN");
wprintf(L"%s %s",a,b);

最后说明一下,源代码是使用utf-8来编码的,并不是ASCII码。

  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值