宽字符

一、ASCII表

1、ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。

2、标准 ASCII 码使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号,以及在美式英语中使用的特殊控制字符。

3、扩展 ASCII 码允许将每个字符的第 8 位用于确定附加的 128 个特殊符号字符、外来语字母和图形符号。

二、GB2312

计算机发明之处及后面很长一段时间,只用应用于美国及西方一些发达国家,ASCII能够很好满足用户的需求。

但是当天朝也有了计算机之后,为了显示中文,必须设计一套编码规则用于将汉字转换为计算机可以接受的数字系统的数,天朝专家把那些127号之后的奇异符号们(即EASCII)取消掉,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。两个字节最高位都是1,拼接一个中文字符

在这些编码里,还把数学符号、罗马希腊的 字母、日文的假名们都编进去了,连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了

三、宽字符

1、宽字符的使用

"中"字的编码:
ASCII:d6 d0
UNICODE:4e 2d

//存不下,会产生高位丢失
char x = '中';

//存下了,但是使用ASCII表存的
wchar_t x1 = '中';

//存下了,是使用UNICODE表存的
wchar_t x1 = L'中';

2、宽字符串的使用

//以00结尾,d6 d0 b9 fa 00
char x[] = "中国";

//以 0000结尾,2d 4e fd 56 00 00
wchar_t x1[] = L"中国";

3、在控制台打印

//打印中国
char x[] = "中国" ;
printf("%s\n",x);

//打印不出来,原因是它查的是ASCII,想要正确解释,需要手动告诉他
wchar_t x1[] = L"中国";
wprintf(L"%s\n",x1);

4、字符串长度(头文件:#include<string.h>)


#include "stdafx.h"
#include<string.h>



//**********************************************************************
int main(int argc, char* argv[])
{
	char x[] = "中国" ;

	wchar_t x1[] = L"中国";

	printf("%d\n",strlen(x));

	wprintf(L"%d\n",wcslen(x1));
	getchar();
	return 0;
}

四、Win32 API

1、在哪里?

什么是Win32 API 主要是存放在 C:\WINDOWS\system32 下面所有的dll

2、非常重要的几个DLL(这些dll只是接口,通过它调用内核函数)

  • Kernel32.dll:最核心的功能模块,比如管理内存、进程和线程相关的函数等.
  • User32.dll:是Windows用户界面相关应用程序接口,如创建窗口和发送消息等.
  • GDI32.dll:全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口

五、Win32 API中的宽字符和多字节字符

Windows是使用C语言开发的,Win32 API同时支持宽字符与多字节字符.

1、字符类型

TCHAR是根据你定义的字符类型自动生成,比如你是多字符,TCHAR编译时时就是多字符,你是宽字符,编译时就是宽字符

char      CHAR
wchar_t   WCHAR
宏        TCHAR

2、字符串指针(同上)

PSTR(LPSTR) 指向多字节字符串
PWSTR(LPWSTR) 指向宽字符串
宏  PTSTR(LPTSTR)

3、字符数组赋值

CHAR cha[] = "中国";
WCHAR chw[] = L"中国";
TCHAR cht[] = TEXT("中国");
posted @ 2021-12-07 21:44  lnterpreter  阅读(118)  评论(0编辑  收藏  举报