20170505Windows02_WindowsDataType

来源:互联网 发布:c语言编译器哪个好2016 编辑:程序博客网 时间:2024/06/06 13:15
VS是微软提供的SDK里面的一环。
.net是windows开发的自己的一门编程语言,微软在之前想开发一门语言来替代C/C++。
Windows制定了一些标准,希望绑架常程序员,从而统一C/C++……

Windows Data Types:

1:Data Type:在windef.h里面找,这些类型是Windows自己定义的,很多都是一样的,只是换了个写法。
2:微软做了很多宏,结构体等,制订了很多数据类型(上百个),都是对C语言的基础数据类型进行包装。只能是在Windows下编程的时候才能使用这些类型。都是非标准数据类型,只是微软SDK里面的数据类型。微软是对C语言进行包装是为了支持C语言。
3:typedef可以对一个数据类型有多个命名:typedef unsigned char BYTE, *pTYPE;
4:BYTE WORD DWORD QWORD分别为无符号8,16,32,64位。DWORD和DWORD_PTR都是unsigned long。但一个表示32位,一个表示32位地址值。所有带PTR的都是指指针地址。是用来装地址值的类型。在64位系统下,DWORD_PTR就变成64位。
5:windows数据类型命名:

L:long(far)

N:near(near):16位中用的较多。

P: pointer
C: const

W:宽字节

CH:char的简写,代表字符

STR:string简写,代表字符串
T:代表宏 _T(一个兼容的宏,自适应UNICODE编码和其他编码)

数据类型:

bit:位,代表一位。

byte:8-bit,代表8位。

__INT8:8位的int型,范围为(-128~127)。

__INT16:16位的int类型,范围为(-32768~32767)。

__INT32:32位的int类型,范围为(-214783648~214783647)。

__INT64:64位的int类型,范围为(-9223372036854775808~9223372036854775807)。

wchar_t:宽字节,UNICODE编码字符。

__INT3264:在32位下就是32位,64位下为64位。

BOOL:32位的,1为真,0为假。

BOOLEAN:8位的,1为真,0为假。

BSTR:就是WCHAR*。

BYTE:就是unsigned char。

CHAR:就是char。

DOUBLE:就是double。

DWORD:定义为unsigned long。

DWORD_PTR:就是ULONG_PTR(unsigned long),所有带PTR的数据类型都是表示32位的地址值(会自动适应系统,不一定一直是32位,可能是64位),装的是一个地址。

DWORD32:定义为unsigned int。

DWORD64:定义为unsigned __int64

error_status_t:错误状态类型,就是unsigned long。微软的错误返回机制是千变万化的(返回类型都不一样),最好通过GetLastError来获取。

FLOAT:就是float。

HANDLE:句柄类型,定义为void*。

TCHAR,与工程有关,工程为unicode编码,TCHAR就是wchar_t,ansi编码则为char

HCALL:定义为DWORD。

HRESULT:会用来表示返回值,实际类型是LONG。

INT:32位的int,就是定义为int。

INT8:8位int,定义为char。

INT16:16位int类型,定义为short。

INT32:就是定义为int。

INT64:64位int,定义为 __int64。

LMCSTR:被定义为const wchar_t*。

LMSTR:被定义为wchar_t*。

LONG:定义为long。

LONGLONG:定义为__int64。

LONG_PTR:长整型的地址值。

LONG32:被定义为int。

LONG64:被定义为__int64。

LPCSTR:被定义为const char*。

LPVOID:被定义为const void*。

LPCWSTR:被定义为const wchar_t*。

LPSTR:被定义为char*。

LPWSTR:被定义为wchar_t*。

QWORD:被定义为__int64。

SHORT:被定义为short。

SIZE_T:被定义为ULONG_PTR,与C++里面的size_t不一样。

STRING:被定义为UCHAR*。

UCHAR:被定义为unsigned char。

UINT:被定义为unsigned int。

UINT8:被定义为unsigned char。

UINT16:被定义为unsigned short。

UINT32:被定义为unsigned int。

UINT64:被定义为unsigned __int64。

ULONG:被定义为unsigned long。

ULONG_PTR:被定义为unsigned __int3264。

ULONG32:被定义为unsigned int。

ULONG64:被定义为unsigned __int64。

ULONGLONG:被定义为unsigned __int64。

UNICODE:被定义为wchar_t,后面已经被废弃了,不再使用。

USHORT:被定义为 unsigned short。

VOID:被定义为:void。

WCHAR:被定义为wchat_t。

字符集:

1:一个字节就是8bit,所谓的宽字节和窄字节,实际上只是一种叫法,是char和whar_t,窄字节宽字节这种叫法是不对的,我们只是用这个来表示意义。这就与字符集产生了关系。之前学的ASCII字符也称为ASCII字符集,只有255个。

2:UTF字符集包含了全世界所有的字符,UTF是一个大的标准,标准制订了所有字符(据说包括预留外星字符)的数值,0~255是和ASCII字符重合的,后面有分区。

    UTF-8 表示字符最小单位是8位可变长字符集,只需要8位可以表示的时候,就用8位,多用于网络传输。
    UTF-16 是16位Windows用的就是UTF-16。目前全世界字符基本可以用UTF-16表示完。Windows从Vsita开始用的UTF-16,以前用的UNICODE编码,两者区别很少。
    UTF-32 是32位,可以包含40多亿字符。
    注意:如果所有字符都占用32位的话就会很浪费,所以就有UTF-8和UTF-16。需要多少byte可以表示就用多少表示,不浪费。这就是为什么UTF字符集有这三个版本。

3:微软提供了很多宽字符的字符串处理函数,C语言里面的字符串处理函数在宽字符集里面变得不再实用

#include <iostream>#include <windows.h>int main(){WCHAR ch = L'M';LPWSTR str = L"ASDF";char* str0 = "我爱Mark";std::cout << strlen(str0) << "   " << str0[0] << std::endl;//输出8    wchar_t *str1 = L"我爱Mark";std::cout << wcslen(str1) << "   " << str1[0] << std::endl;//输出6    25105return 0;}

4:UTF-16可以转化成UTF-8,UTF-8可以转化为UTF-32或UTF-16。都是可变长的。与UNICODE是一模一样的,只是UNICODE没有可变长这一说法。

5:GBK编码:以及一些其他的编码都已经慢慢退化,用的较少了,现在主流的是UTF编码。

6:使用宽字符集之后,很多C语言里面的字符串处理函数就没办法使用了,Windows提供了一些宽字符处理的函数。详见:http://blog.csdn.net/qq_31622605/article/details/71308377




1 0