C语言宽字符输出和转换

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


在locale.h头文件中有个setlocale函数,它的作用是设置运行时的字符集环境。一般C/C++编译器默认字符集环境为"C",所以你要正常输出单个中文字符,或者用mbstowcs、wcstombs等C库函数的时候,需要设置字符集环境为中文。
setlocale函数的原型如下:

char *setlocale(
   int category,        
   const char *locale 
);

第一个参数MSDN是这样描述的:
The category argument specifies the parts of a program’s locale information that are affected
大意是,这个参数指定哪一部分受你给定的语言环境所影响。具体的category请参考MSDN。

第二个参数就是你所指定的语言环境。

一般中文的有如下设置:
“chinese”
“chinese-simplified” or “chs”
“chinese-traditional” or “cht”

例子1:
输出单个中文字符

	setlocale(LC_ALL, "chs");
	wprintf(L"%c", L'你');

例子2:
窄字符转换为宽字符
mbstowcs函数原型如下:

size_t mbstowcs(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count 
);

第一个参数是wchar_t[]的宽字符串缓冲区,转换后,结果保存在里面。
第二个参数是需要转换的char[]字符串
第三个转换的最大字节数,一般填上wchar_t[]数组的大小即可

转换单个字符

	setlocale(LC_ALL, "chs");
	wchar_t w = 0;
	char c[3] = "你";
	mbstowcs(&w, c, 1);

例子3:
宽字符转换为窄字符
wcstombs函数原型如下:

size_t wcstombs(
   char *mbstr,
   const wchar_t *wcstr,
   size_t count 
);

第一个参数是char[]的宽字符串缓冲区,转换后,结果保存在里面。
第二个参数是需要转换的wchar_t[]字符串
第三个转换的最大字节数,一般填上char[]数组的大小即可

转换单个字符

	setlocale(LC_ALL, "chs");
	wchar_t w = L'你';
	char c[3] = "";
	wcstombs(c, &w, 3);
	printf("%c%c\n", c[0], c[1]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值