滴水逆向——Win32_宽字符

1、宽字符的使用
"中"字的编码:
ASCII:d6 d0
UNICODE:4e 2d
char x = '中';
wchar_t x1 = '中';

观察内存中的值,为什么会出现这种情况?

滴水逆向——Win32_宽字符

如何告诉编译器我们要使用的是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);            //默认使用英文

滴水逆向——Win32_宽字符                    

告诉编译器,使用控制台默认的编码格式
(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                    

滴水逆向——Win32_宽字符

5、字符串复制
char x[] = "china";
char x1[] = "123";
strcpy(x, x1);
wchar_t y[] = L"中国";
wchar_t y1[] = L"好";
wcscpy(y, y1);

滴水逆向——Win32_宽字符

 

滴水逆向——Win32_宽字符

内核中全是Unicode编码

utf_8、utf_16全是Unicode的扩展