宽字符
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);
}
文章介绍了Unicode字符集在Windows环境下的使用,强调了宽字符L...的使用以及MessageBox函数在不同情况下的字符解析方式。通过示例代码展示了窄字符(char)和宽字符(wchar_t)的内存占用,以及如何正确处理宽窄字符转换和显示。
5204

被折叠的 条评论
为什么被折叠?



