/*
* 字符集的相互转化一直以来困扰着我
* 这篇文章主要是针对 char 和 wchar_t 的相互转化
* C的标准库对这两种不同类型的字符类型提供了不同的操作函数
* 另外说明一下,C++的标准IO库虽然解决了无类型输出的问题,但是各个编译器对它的支持有差异,不建议使用
* 相反,C的国际化得到了很好的兼容性
* 详细的可以参考下面的链接:
* http://www.cnblogs.com/zyl910/archive/2013/01/20/wchar_crtbug_01.html
*/
#include <cstdio>
#include <clocale>
#include <cstdlib>
int main() {
const int LEN = 1024;
char s1[LEN] = "我是好人!";
wchar_t ws1[LEN];
char s2[LEN];
wchar_t ws2[LEN] = L"你也是好人!";
int ret = 0;
char *locale_buffer = setlocale(LC_ALL, NULL);
setlocale(LC_ALL, "");
ret = mbstowcs(ws1, s1, LEN);
if (ret == LEN) ws1[LEN-1] = L'\0';
printf("%s", s1);
putchar('\n');
if (ret) printf("%ls", ws1);
putchar('\n');
ret = wcstombs(s2, ws2, LEN);
if (ret == LEN) s2[LEN-1] = '\0';
printf("%ls", ws2);
putchar('\n');
if (ret) printf("%s", s2);
putchar('\n');
setlocale(LC_ALL, locale_buffer);
return 0;
}
char 与 wchar_t 的互相转化
最新推荐文章于 2021-04-23 17:45:20 发布