Win32数据类型
2012-05-20 16:02
351 查看
学习过C语言的童鞋,应当对C语言数据类型非常熟悉,但C语言的数据类型有如下几个缺陷:
数据类型平台相关,在不同平台上,同一个数据类型可能占用不同的空间大小。典型的,在16位系统上,int类型和short int类型长度相同,但在32位平台上,则和long int类型长度相同;
数据类型过于单一,例如在表现数值和布尔这两种情况时,虽然它们都是32位长度,但分开表达显然更加方便和直观;
平台差异,例如__int64, long long, wchar_t, longptr_t这些类型,在不同的平台上可能定义的并不相同
为了解决这些问题,微软使用typedef关键字,为很多常用的C类型均定义了别名,这样一来,要解决源代码移植问题,只需在目标平台上定义相同的一套类型别名,即可解决大部分问题。
本例就来解决这些五花八门的Win32自定义类型。
数据类型平台相关,在不同平台上,同一个数据类型可能占用不同的空间大小。典型的,在16位系统上,int类型和short int类型长度相同,但在32位平台上,则和long int类型长度相同;
数据类型过于单一,例如在表现数值和布尔这两种情况时,虽然它们都是32位长度,但分开表达显然更加方便和直观;
平台差异,例如__int64, long long, wchar_t, longptr_t这些类型,在不同的平台上可能定义的并不相同
为了解决这些问题,微软使用typedef关键字,为很多常用的C类型均定义了别名,这样一来,要解决源代码移植问题,只需在目标平台上定义相同的一套类型别名,即可解决大部分问题。
本例就来解决这些五花八门的Win32自定义类型。
1 | #include <tchar.h> |
2 | #include <stdio.h> |
3 | #include <locale.h> |
4 | #include <windows.h> |
5 | |
6 | int_tmain(intargc, TCHAR* argv[]) |
7 | { |
8 | // BOOL类型, 它映射在int类型上, 表示布尔逻辑。 |
9 | // 还有两个宏TRUE, 映射为1, FALSE映射为0 |
10 | BOOL bGood = TRUE; |
11 | |
12 | // CHAR类型, 映射在char类型上 |
13 | // 表示一个字符, 有符号8位整型 |
14 | CHAR cWord = 0x7F; |
15 | |
16 | // BYTE类型, 映射在unsigned char类型上, |
17 | // 表示一个无符号8位整型 |
18 | BYTE ucWord = 0xFF; |
19 | |
20 | // SHORT类型, 映射在short类型上, |
21 | // 表示一个有符号16位整型 |
22 | SHORT sNum = 0x7FFF; |
23 | |
24 | // USHORT类型, 映射在unsigned short类型上, |
25 | // 表示一个无符号16位整型 |
26 | USHORT usNum = 0xFFFF; |
27 | |
28 | // INT类型, 映射在int类型上, |
29 | // 表示一个有符号32位整型 |
30 | INTnNum = 0x7FFFFFFF; |
31 | |
32 | // UINT类型, 映射在unsigned int类型上, |
33 | // 表示一个无符号32位整型 |
34 | UINT uNum = 0xFFFFFFFF; |
35 | |
36 | // LONG类型, 映射在long类型上, |
37 | // 表示一个有符号32位整型 |
38 | LONG lNum = nNum; |
39 | |
40 | // ULONG类型, 映射在unsigned long类型上, |
41 | // 表示一个无符号32位整型 |
42 | ULONG ulNum = uNum; |
43 | |
44 | // UINT_PTR类型, 即C中的uintptr_t类型, |
45 | // 表示一个无符号32位整型, 一般用来保存一个指针 |
46 | UINT_PTR lpPtr = (UINT_PTR)_T("Hello World"); |
47 | |
48 | // ULONG_PTR类型, 即32位系统下的UINT_PTR类型 |
49 | ULONG_PTR lpLptr = (ULONG_PTR)lpPtr; |
50 | |
51 | // LONGLONG类型, 即C语言中的long long类型, |
52 | // Win32定义为__int64, 有符号64位整型 |
53 | LONGLONG llBigValue = 0x7FFFFFFFFFFFFFFF; |
54 | |
55 | // ULONGLONG类型, 即C语言的unsigned long long 类型, |
56 | // Win32定义为unsigned __int64, 无符号64位整型 |
57 | ULONGLONG ullBigValue = 0xFFFFFFFFFFFFFFFF; |
58 | |
59 | // WORD类型, 字类型, 映射在unsigned short类型上, 表示一个字 |
60 | WORD wNum = usNum; |
61 | |
62 | // DWORD类型, 双字类型, 映射在unsigned long类型上, 表示两个字 |
63 | DWORD dwNum = ulNum; |
64 | |
65 | // FLOAT类型, 映射在float类型上, 有符号32位浮点数, 单精度浮点类型 |
66 | FLOAT fNum = 123.123; |
67 | |
68 | // DOUBLE类型, 映射在double类型上, 有符号64位浮点数, 双精度浮点类型 |
69 | DOUBLE dNum = 456.456; |
70 | |
71 | // WCHAR类型, 映射在wchar_t类型上, 表示一个UNICODE字符, 无符号16位整型 |
72 | WCHAR wcWord = L'人'; |
73 | |
74 | // TCHAR类型, 在定义了_UNICODE宏时, 映射到wchar_t类型上, 否则映射到char类型上 |
75 | TCHAR tcWord = _T('M'); |
76 | |
77 | |
78 | // LPSTR类型, 映射在char*类型上, 表示一个指向字符串的指针 |
79 | LPSTR lpszStr = "Hello Everyone"; |
80 | |
81 | // LPCSTR类型, 映射在constnchar*类型上, 表示一个指向字符串的不变指针 |
82 | LPCSTR lpcszStr = lpszStr; |
83 | |
84 | |
85 | // LPWSTR类型, 映射在wchar_t*类型上, 表示一个指向UNICODE编码字符串的指针 |
86 | LPWSTR lpwcStr = L"Hello Everyone"; |
87 | |
88 | //n LPCWSTR类型, 映射在const wchar_t*类型上, 表示一个指向UNICODE编码字符串的不变指针 |
89 | LPCWSTR lpcwcStr = lpwcStr; |
90 | |
91 | // LPTSTR类型, 映射在TCHAR*类型上, 根据是否定义_UNICODE宏, 映射为LPSTR或LPWSTR |
92 | LPCTSTR lpcszTStr = lpszTStr; |
93 | |
94 | // LPCTSTR类型, 映射在const TCHAR*类型上, 根据是否定义_UNICODE宏, 映射为LPCSTR或LPCWSTR |
95 | LPTSTR lpszTStr = _T("Hello Everyone"); |
96 | |
97 | _tsetlocale(LC_ALL, _T("zhi")); |
98 | |
99 | _tprintf(_T("bGood 值为:%s"), bGood == TRUE ? _T("TRUE") : _T("FASLE")); |
100 | _tprintf(_T("/ncWord 的值为:%d"), cWord); |
101 | _tprintf(_T("/nucWord 的值为:%d"), ucWord); |
102 | _tprintf(_T("/nsNum 的值为:%d"), sNum); |
103 | _tprintf(_T("/nusNum 的值为:%d"), usNum); |
104 | _tprintf(_T("/nnNum 的值为:%d"), nNum); |
105 | _tprintf(_T("/nuNum 的值为:%u"), uNum); |
106 | _tprintf(_T("/nlNum 的值为:%d"), lNum); |
107 | _tprintf(_T("/nulNum 的值为:%u"), ulNum); |
108 | _tprintf(_T("/nlpPtr 指向的内容为:%s"), lpPtr); |
109 | _tprintf(_T("/nlpLptr 指向的内容为:%s"), lpLptr); |
110 | |
111 | // 下面代码展示了如何使用printf输出64位整数 |
112 | _tprintf(_T("/nllBigValue 的值为:%lld"), llBigValue); |
113 | |
114 | // 下面代码展示了如何使用printf输出64位无符号整数 |
115 | _tprintf(_T("/nullBigValue 的值为:%llu"), ullBigValue); |
116 | |
117 | _tprintf(_T("/nwNum 的值为:%u"), wNum); |
118 | _tprintf(_T("/ndwNum 的值为:%u"), dwNum); |
119 | |
120 | _tprintf(_T("/nfNum 的值为:%f"), fNum); |
121 | _tprintf(_T("/ndNum 的值为:%f"), dNum); |
122 | |
123 | // 思考一下, 这里为什么使用wprintf函数? |
124 | wprintf(L"/nwcWord 的值为:%c", wcWord); |
125 | |
126 | // 思考一下, 这里tcWord变量的值可不可以是一个汉字? |
127 | _tprintf(_T("/ntcWord 的值为:%c"), tcWord); |
128 | |
129 | printf("/nlpszStr 的值为:%s", lpszStr); |
130 | printf("/nlpszStr 的值为:%s", lpcszStr); |
131 | |
132 | wprintf(L"/nlpwcStr 的值为:%s", lpwcStr); |
133 | wprintf(L"/nlpwcStr 的值为:%s", lpcwcStr); |
134 | |
135 | _tprintf(_T("/nlpszTStr 的值为:%s"), lpszTStr); |
136 | _tprintf(_T("/nlpcszTStr 的值为:%s"), lpcszTStr); |
137 | |
138 | _tprintf(_T("/n")); |
139 | _tsystem(_T("pause")); |
140 | return 0; |
141 | } |
相关文章推荐
- Win32 常用数据类型
- Win32 API中微软定义的数据类型
- 常用Win32数据类型与.NET平台数据类型的对应表
- C#中对应win32 API原型函数的一些数据类型
- Win32 - 07 Win32数据类型
- 学 Win32 汇编[5]: 数据类型与声明
- 学 Win32 汇编[5]: 数据类型与声明
- win32汇编 数据类型
- win32数据类型总结
- Win32中的数据类型
- Interop时候.Net和Win32对应数据类型
- Win32 常用数据类型
- [转]C#中对应win32 API原型函数的一些数据类型
- C#中对应win32 API原型函数的一些数据类型
- win32数据类型一览
- C++win32、win64、linux32、linux64中各数据类型占字节数
- Win32 -Win32数据类型
- Win32 API与C#数据结构类型对应关系表
- C#中对应win32 API原型函数的一些数据类型(zhuan)
- C#中对应win32 API原型函数的一些数据类型