Win32 -Win32数据类型

 Win32 - 07 Win32数据类型

学习过C语言的童鞋,应当对C语言数据类型非常熟悉,但C语言的数据类型有如下几个缺陷:

数据类型平台相关,在不同平台上,同一个数据类型可能占用不同的空间大小。典型的,在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   }


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mousebaby808/archive/2010/01/27/5259955.aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值