滴水逆向——Win32_宽字符
1、宽字符的使用
"中"字的编码:
ASCII:d6 d0
UNICODE:4e 2d
char x = '中';
wchar_t x1 = '中';
观察内存中的值,为什么会出现这种情况?
如何告诉编译器我们要使用的是Unicode的那张表呢?
wchar_t x1 = L'中';
2、宽字符串的使用
char x[] = "中国";
//d6 d0 b9 fa 00 使用拓展ASCII编码表 以00(\0)结尾
wchar_t x1[] = L"中国";
//2d 4e fd 56 00 00 使用UNICODE编码表 以00 00(\0\0)结尾
3、在控制台打印
char x[] = "中国";
wchar_t x1[] = L"中国";
printf("%s\n", x); //使用控制台默认的编码
wprintf(L"%s\n", x1); //默认使用英文
告诉编译器,使用控制台默认的编码格式
(1) 包含头文件 #include <locale.h>
(2) setlocale(LC_ALL, ""); //使用控制台默认的编码
4、字符串长度(头文件:#include<string.h>)
char x[] = "中国";
wchar_t x1[] = L"中国";
strlen(x); //取得多字节字符串中字符长度,不包含 00
wcslen(x1); //取得多字节字符串中字符长度,不包含 00 00
5、字符串复制
char x[] = "china";
char x1[] = "123";
strcpy(x, x1);
wchar_t y[] = L"中国";
wchar_t y1[] = L"好";
wcscpy(y, y1);
内核中全是Unicode编码
utf_8、utf_16全是Unicode的扩展