宽字符
Unicode字符集设置
Unicode字符集需要宽字符,因此需要加宏指令L
#include<stdio.h>
#include<windows.h>
void main()
{
MessageBox(0,L"你好天朝",L"你好世界",0);
}
占用内存长度
代码如下:
#include<stdio.h>
#include<windows.h>
void main()
{
// char占1个字节
char ch = 'A';
// wchar_t占2个字节
wchar_t ch1 = L'0';
printf("%d",sizeof(ch),sizeof(ch1))
}
输出如下:
1,2
MessageBox
MessageBox可以根据入参决定以宽字符解析还是以窄字符解析
#include<stdio.h>
#include<windows.h>
void main()
{
MessageBox(0,"你好世界","我是",0); //在以Unicode字符集显示时会乱码,此时需修改项目字符集为多字节字符集
MessageBox(0,L"你好世界",L"我是",0); //在以Unicode字符集显示时不会乱码,因为已经作为宽字符来处理
}
MessageBoxA默认以窄字符来处理
#include<windows.h>
#include<stdio.h>
void main()
{
MessageBoxA(0,"你好世界","我是",0);
}
MessageBoxW 默认以宽字符来处理
#include<windows.h>
#include<stdio.h>
void main()
{
MessageBoxB(0,L"你好世界",L"我是",0);
}
MessageBox以TEXT兼容
#include<stdio.h>
#include<windows.h>
void main()
{
MessageBox(0,TEXT("你好世界"),TEXT("我是"),0);
}
宽字符处理
以窄字符处理宽字符
#include<stdio.h>
void main()
{
char ch[20] = "我";
printf("%c%c",ch[0],ch[1]);
}
宽字符打印
#include<stdio.h>
#include<locale> //本地化
void main()
{
wchar_t wstr[10] = L"1234"; //宽字符用wprintf打印,显示英文
// 显示中文需要进行本地化操作,引入locale头文件,并进行setlocale操作
setlocale(LC_ALL,"zh-CN");
wprintf(L"%ls",wstr);
}
宽字符和窄字符对于原有的英文没有变化
#include<stdio.h>
void main()
{
wchar_t wch = L'A';
// 输出仍为65
printf("%d",wch);
}