PoEdu_Windows_Lesson02_数据类型和字符编码
来源:互联网 发布:java软件工程师资格证 编辑:程序博客网 时间:2024/05/29 09:23
Windows数据类型
1.学习了C/C++的数据类型,为什么还要学习Windows数据类型?
学这个,不是因为我们一定要用它,而是因为有可能微软的API的参数/返回值就是这个东西,是微软的SDK中的一些东西,所以要知道。
这事windows制定的一些标准,希望程序员按照他的标准来做,但是它的一些标准是与C++标准所背离的。它是对C语言中的基础数据类型进行了一次再包装。
不是对C++的数据类型进行再包装,是为了支持C语言,可以在minwindef.h中查看
2.windows的数据类型
HANDLE
其实就是一个void*类型,代表的是一个实体
BOOL
是拿一个int来做的(32位),用来代表true和falseBOOLEAN
占用8bit,用来代表true和falseBYTE
是一个unsigned char
BSTR
CHAR
8bit
DWORD
主要表示32位的数据,是一个unsigned long
DWORD_PTR
也是unsigned long,存储的是一个地址,但是不能不直接通过*取到值,还需要做一个强制转换,在内核里面用的多,用户态中比较少用到
所以DWORD和DWORD_PTR本质是一样的(都是一个unsigned long),DWORD_PTR 不是一个指针,它只是存储了一个地址。在32位系统下,内存地址值的长度是32位,64位系统下,是表示64位的地址值,这是为了兼容。
PDWORD_PTR才是一个指针,前缀为P
示例:
DWORD_PTR pNum=&num
*(int*)pNUm=100;取值的时候需要先进行一个强转,成为一个指针之后才能做解引用操作
处理错误的机制
微软的错误返回机制是千变万化的,没有统一…
所以使用API的时候,必须要在MSDN中查它的错误是怎么返回的,勤查文档是一个好习惯
HCALL
是一个DWORD
HRESULT
是一个LONG,也会用来做返回值,有坑,遇到HRESULT一定要查文档
INT
是一个intPINT
代表的是point int
LPINT
代表的是long point
与PINT本质上没区别,都是指针,都是4Byte
INT8
长度为8byte的整型LMCSTR
LPWSTR、PWSTR
代表一个字符串,示例:
LPWSTR str=”hello”
WCHAR
16bit
PWCHAR/LPWCH/PWCH: 指针
LPCWCH/PCWCH const 指针
WCHAR wchar=L’w’; 代表一个字符TCHAR
视情况不同而变
根据工程而定,如果工程是unincode编码,那么TCHAR=wchar_t,如果不是,那么TCHAR=char
编译器中设置字符集来改变
由WCHAR CHAR TCHAR引申出了很多的类型
LPCVOID
QWORD
64bit
SIZE_T
ULONG_PTR
STRING
是UCHAR,是一个窄字符,不是字符串,其实没啥用
UINT
ULONG_PTR
根据系统变换而变化长度、根据不同的工程配置发生变化
VOID
小结
各字面一般来说代表的意义:
L:long
P:point
W:宽(wide)
A:窄字符串
STR:字符串
C:const
Q:四倍
字符编码——宽字节和窄字节
char
窄字节 8bit,用来操作ASCII字符集中的字符会更方便
wchar_t
宽字节 16bit,用于操作Unicode的字符集,会更方便,在windows下编程都用宽字符集(wchar_t),原生也是wchar_t
使用函数wcslen
TCHAR是使用_tcslen
windows版本很多,所以一些API的参数是ASCII码的,用TCHAR可以让我们少费点脑筋去考虑宽字节和窄字节的问题,但是建议少用TCHAR,考虑到移植性,尽量使用C语言中的数据类型,宽字节就用wchar_t,窄字节就用char
字符集
ASCII字符集
255个字符
UTF字符集
UTF-8、UTF-16、UTF-32
由ISO(国际标准组织)制定出来的,包含了全世界所有的字符
UTF是一个大的标准,标准制定了所有的字符(包括外星字符)对应的数值,0-255是和ASCII重叠的(其它字符相当于是分区存放了,比如中文是在区间A-B,俄文是在区间B-C)
UTF是可变长的(最小是8bit)
只需要8bit的的时候,就不会用32bit去做,多用于网络传输,因为可以进行字符的压缩
UTF-16
windows用的就是UTF-16编码,因为现在已知的字符,用UTF-16正好显示完,从Vsita(WIN10)开始用UTF-16 ,win10之前是Unicode,其实是一样的东西,只是UTF-16多了一个可变长(但是其实16已经不用可变长了,因为16位已经差不多够用了,所以UTF-16和Unicode也可以认为是一样的)
- PoEdu_Windows_Lesson02_数据类型和字符编码
- 字符编码和String数据类型
- 字符编码和数据类型笔记
- 数据类型和字符编码的关系
- 操作基本数据类型,字节数组的流 和 字符编码
- Python学习随笔一:数据类型和字符编码
- Windows编程笔记。第三课Windows数据类型和字符编码
- 字符和字符编码
- 字符编码 - 字符集和编码
- 字符,字节和编码
- 字符,字节和编码
- 字符,字节和编码
- 字符,字节和编码
- 字符,字节和编码
- 字符,字节和编码
- 字符,字节和编码
- 字符,字节和编码
- 字符,字节和编码
- 用户和用户组
- Activity被回收导致Fragment的getActivity为null的解决办法
- Spring MVC 整合 hibernate-validator
- 大数据概念,数据技术分类,ETL
- could not extract ResultSet
- PoEdu_Windows_Lesson02_数据类型和字符编码
- Android 出现错误:Error:(1, 0) Minimum supported Gradle version is 3.3. Current version is 2.14.1. If usi
- HTML+CSS+JS+Ajax技巧篇
- leetcode reorderList Given{1,2,3,4}, reorder it to{1,4,2,3}.
- 论初次修改 Android framework 代码
- Java-java中jvm原理详解
- Linux下sonarqube安装使用方法(代码check工具)
- Android自定义View--简单实现凹凸优惠券效果
- 为什么你们说好的程序在我的海思开发板上就是不行呢,难道真的是人品有问题