久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

windows 的數(shù)據(jù)類型

 思考的軌跡 2012-03-23

windows 的數(shù)據(jù)類型


1. Visual C/C++ 數(shù)據(jù)類型

Visual c/c++ 支持下列幾個(gè) integer 類型:

  • __int8
  • __int16
  • __int32
  • __int64

它們分別對應(yīng)于 ANSI C 的:

  • char
  • short
  • int
  • long long

Visual C/C++ 支持 bool 類型,并且增加了:

  • wchat_t(或者 _wchat_t)

這個(gè)類型 2 bytes 寬,,用來表示 wide-character 或者 multibyte character,,在字符前加上前綴 L 來表示 wide-character,如:

  • 'a' --- ANSI character
  • L'a' --- wide character

上面分別是字符 'a' 的 ANSI 版本和 wide 版本,,wchar_t 的意義是 unsigned short

對于每個(gè) integer 類型都分別有 signed unsigned 版本,,缺省情況下是 signed

VC/C++ 類型
對應(yīng)于
字節(jié)數(shù)
表達(dá)范圍
__int8
char, signed char
1
–128 to 127
unsigned __int8
unsigned char
1
0 to 255
__int16
short, singed short
2
–32,768 to 32,767
unsigned __int16
unsigned short
2
0 to 65,535
__int32
int, signed int
4
–2,147,483,648 to 2,147,483,647
unsigned __int32
unsigned int
4
0 to 4,294,967,295
__int64
long long, signed long long
8
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned __int64
unsigned long long
8
0 to 18,446,744,073,709,551,615

VC 頭文件 limits.h 里定義了 integer 類型的 limit 值:

常量
意義
CHAR_BIT Number of bits in the smallest variable that is not a bit field. 8
SCHAR_MIN Minimum value for a variable of type signed char. –128
SCHAR_MAX Maximum value for a variable of type signed char. 127
UCHAR_MAX Maximum value for a variable of type unsigned char. 255 (0xff)
CHAR_MIN Minimum value for a variable of type char. –128; 0 if /J option used
CHAR_MAX Maximum value for a variable of type char. 127; 255 if /J option used
MB_LEN_MAX Maximum number of bytes in a multicharacter constant. 5
SHRT_MIN Minimum value for a variable of type short. –32768
SHRT_MAX Maximum value for a variable of type short. 32767
USHRT_MAX Maximum value for a variable of type unsigned short. 65535 (0xffff)
INT_MIN Minimum value for a variable of type int. –2147483648
INT_MAX Maximum value for a variable of type int. 2147483647
UINT_MAX Maximum value for a variable of type unsigned int. 4294967295 (0xffffffff)
LONG_MIN Minimum value for a variable of type long. –2147483648
LONG_MAX Maximum value for a variable of type long. 2147483647
ULONG_MAX Maximum value for a variable of type unsigned long. 4294967295 (0xffffffff)
_I64_MIN Minimum value for a variable of type __int64 -9223372036854775808
_I64_MAX Maximum value for a variable of type __int64 9223372036854775807
_UI64_MAX Maximum value for a variable of type unsigned __int64 18446744073709551615 (0xffffffffffffffff)

 

2. windows 上的數(shù)據(jù)類型

windows 自定義了一系列的數(shù)據(jù)類型,可以說是琳瑯滿目,,甚至可以說混亂

在 MSND 里有一篇介紹 windows 上定義的數(shù)據(jù)類型:http://msdn.microsoft.com/en-us/library/aa383751(v=VS.85).aspx


2.1 基本數(shù)據(jù)類型

類型
定義為
寬度
頭文件
BOOL typedef int BOOL;
4
WinDef.h
BOOLEAN typedef BYTE BOOLEAN;
1
WinNT.h
BYTE typedef unsigned char BYTE;
1
WinDef.h
CHAR typedef char CHAR;
1
WinNT.h
UCHAR typedef unsigned char UCHAR;
1
WinDef.h
SHORT typedef short SHORT
2
WinNT.h
USHORT typedef unsigned short USHORT;
2
WinDef.h
WORD typedef unsinged short WORD;
2
WinDef.h
DWORD typedef unsigned long DWORD;
4
WinDef.h
DWORD32 typedef unsigned int DWORD32;
4
BaseTsd.h
DWORD64 typedef unsigned __int64 DWORD64;
8
BaseTsd.h
INT typedef int INT;
4
WinDef.h
INT32 typedef signed int INT32;
4
BaseTsd.h
INT64 typedef singed __int64 INT64;
8
BaseTsd.h
UINT typedef unsigned int UINT;
4
WinDef.h
UINT32 typedef unsigned int UINT32;
4
BaseTsd.h
UINT64 typedef unsigned __int64 UINT64
8
BaseTsd.h
LONG typedef long LONG;
4
WinNT.h
LONG32 typedef signed int LONG32;
4
BaseTsd.h
LONG64 typedef __int64 LONG64;
8
BaseTsd.h
DWORDLONG typedef ULONGLONG DWORDLONG;
8
WinNT.h
LONGLONG typedef __int64 LONGLONG;
8
WinNT.h
ULONG typedef unsigned long ULONG;
4
WinNT.h
ULONG32 typedef unsigned int ULONG32;
4
BaseTsd.h
ULONGLONG typedef unsinged __int64 ULONGLONG;
8
WinNT.h
ULONG64 typedef unsigned __int64 ULONG64;
8
BaseTsd.h
FLOAT typedef float FLOAT;
4
WinDef.h

上表所示,,對一個(gè)類型進(jìn)行明確的定位,分為 32/64 版本以及 signed/unsinged 版本,。它們固定了精度,。


2.2 為 UNICODE 準(zhǔn)備的數(shù)據(jù)類型

類型
定義為
寬度
頭文件
WCHAR typedef wchat_t WCHAR;
2
WinNT.h
TBYTE typedef WCHAR TBYTE;
2
WinNT.h
TCHAR typedef WCHAR TCHAR;
2
WinNT.h

TBYTE TCHAR 類型在 WinNT.h 的實(shí)際定義為:

#ifdef  UNICODE                  

   #ifndef _TCHAR_DEFINED
       typedef WCHAR TCHAR, *PTCHAR;
       typedef WCHAR TBYTE , *PTBYTE ;

       #define _TCHAR_DEFINED
   #endif

#else                

    #ifndef _TCHAR_DEFINED
        typedef char TCHAR, *PTCHAR;
        typedef unsigned char TBYTE , *PTBYTE ;

        #define _TCHAR_DEFINED
    #endif

#endif /* UNICODE */ 

如果定義了 UNICODE 的話,TCHAR 和 TBYTE 就是 WCHAR 類型,,否則它們是 char/unsigned char 類型,。

因此:TCHAR TBYTE 是中立的字符類型,依賴于 UNICODE 是否定義,。


2.3 指針精度

類型
定義為
寬度
頭文件
DWORD_PTR typedef ULONG_PTR DWORD_PTR;
4/8
BaseTsd.h
INT_PTR sizeof(pointer)
4/8
BaseTsd.h
UINT_PTR sizeof(pointer)
4/8
BaseTsd.h
LONG_PTR sizeof(pointer)
4/8
BaseTsd.h
ULONG_PTR sizeof(pointer)
4/8
BaseTsd.h
SIZE_T typedef ULONG_PTR SIZE_T;
4/8
BaseTsd.h
SSIZE_T typedef LONG_PTR SSIZE_T;
4/8
BaseTsd.h
HALF_PTR sizeof(pointer)/2
2/4
BaseTsd.h
UHALF_PTR sizeof(pointer)/2
2/4
BaseTsd.h

sizeof(pointer) 意思是類型的寬度依賴于 pointer 的寬度,,有 32/64 位寬度。

BaseTsd.h 這些指針精度的定義為:

#if defined(_WIN64)
    typedef __int64 INT_PTR, *PINT_PTR;
    typedef unsigned __int64 UINT_PTR, *PUINT_PTR;

    typedef __int64 LONG_PTR, *PLONG_PTR;
    typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;

    #define __int3264   __int64

#else
    typedef _W64 int INT_PTR, *PINT_PTR;
    typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;

    typedef _W64 long LONG_PTR, *PLONG_PTR;
    typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;

    #define __int3264   __int32

#endi

在 WIN64 下它們的 __int64 類型,,指示 64 位的 pointer 寬度,。

_W64 被定義為 _w64,如果不在 WIN64 環(huán)境下,,關(guān)鍵字 _w64 表示:那么它們依賴于 complier 是否開啟 /Wp64 編譯選項(xiàng),。

如果開啟了 /Wp64 選項(xiàng),這些 XXX_PTR 寬度是 64 位,,否則它們是 32 位寬度的,,這里有一篇文章分紹 _w64: http://msdn.microsoft.com/en-us/library/s04b5w00.aspx


2.4 windows 上的字符串

在 windows 上使用兩種類型的字符串:

  • ANSI 字符串
  • UNICODE 字符串

ANSI 字符串是 8 bits 的 char 類型字符串,UNICODE 字符串是 16 bits 的 wchar_t 類型字符串,。


2.4.1 ANSI 字符串指針

類型
定義為
頭文件
PCHAR typedef CHAR *PCHAR;
WinNT.h
PSTR typedef __nullterminated CHAR *PSTR;
WinNT.h
PCSTR typedef __nullterminated CONST CHAR *PCSTR;
WinNT.h
LPSTR typedef __nullterminated CHAR *LPSTR;
WinNT.h
LPCSTR typedef __nullterminated CONST CHAR *LPCSTR
WinNT.h

它們都指向 8 bits ANSI 字符串,,__nullterminated 是一個(gè)編譯器使用的 annotation(注解),表示包括 null 字符,,也就是以 null 字符結(jié)尾的串,。

PCHAR 指向字符,PSTR 指向 null 字符結(jié)尾的字符串,,因此,,程序中如果使用 ANSI 字符串的話,應(yīng)該使用 PSTR 類型。

PLP 都表示指針,,實(shí)際上它們都是一樣的,。


2.4.2 UNICODE 字符串指針

類型
定義為
頭文件
PWCHAR typedef CHAR *PWCHAR;
WinNT.h
PWSTR typedef __nullterminated WCHAR *PSTR;
WinNT.h
PCWSTR typedef __nullterminated CONST WCHAR *PCSTR;
WinNT.h
LPWSTR typedef __nullterminated WCHAR *LPSTR;
WinNT.h
LPCWSTR typedef __nullterminated CONST WCHAR *LPCSTR
WinNT.h

PWCHAR 指向 WCHAR 字符,其它都是指向 16 bits 的以 null 字符結(jié)尾的 Wide 字符串,。情形和 ANSI 字符串一樣,。


2.4.3 中立的字符串指針

類型
定義為
頭文件
PTCHAR 依賴于是否定義 UNICODE
WinNT.h
PTSTR 依賴于是否定義 UNICODE
WinNT.h
PCTSTR 依賴于是否定義 UNICODE
WinNT.h
LPTSTR 依賴于是否定義 UNICODE
WinNT.h
LPCTSTR 依賴于是否定義 UNICODE
WinNT.h

這些 TCHAR 類型的字符串指針類型依賴于是否定義了 UNICODE 宏:

  • 在定義了 UNICODE 的情況下,它們指向 WCHAR 字符串(各種類型)
  • 未定義 UNICODE 時(shí),,它們指向 CHAR 字符串(各種類型)

因此在我們的程序中應(yīng)該盡量使用 TCHAR 類型的指針,,以保持中立性。

 

2.5 windows 上的各類指針

類型
定義為
頭文件
PBOOL typedef BOOL *PBOOL;
WinDef.h
PBOOLEAN typedef BOOLEAN *PBOOLEAN;
WinNT.h
PBYTE typedef BYTE *PBYTE;
WinDef.h
PCHAR typedef CHAR *PCHAR;
WinNT.h
PUCHAR typedef UCHAR *PUCHAR;
WinDef.h
PSHORT typedef SHORT *PSHORT
WinNT.h
PUSHORT typedef USHORT *PUSHORT;
WinDef.h
PWORD typedef WORD *PWORD;
WinDef.h
PDWORD typedef DWORD *PDWORD;
WinDef.h
PDWORD32 typedef DOWORD32 *PDWORD32;
BaseTsd.h
PDWORD64 typedef DWORD64 *PDWORD64;
BaseTsd.h
PINT typedef INT *PINT;
WinDef.h
PINT32 typedef INT32 *PNT32;
BaseTsd.h
PINT64 typedef INT64 *PINT64;
BaseTsd.h
PUINT typedef UINT *PUINT;
WinDef.h
PUINT32 typedef UINT32 *PUINT32;
BaseTsd.h
PUINT64 typedef UINT64 *PUINT64
BaseTsd.h
PLONG typedef LONG *PLONG;
WinNT.h
PLONG32 typedef LONG32 *PLONG32;
BaseTsd.h
PLONG64 typedef LOGN64 *PLONG64;
BaseTsd.h
PDWORDLONG typedef DWORDLONG *PDWORDLONG;
WinNT.h
PLONGLONG typedef LONGLONG *PLONGLONG;
WinNT.h
PULONG typedef ULONG *PULONG;
WinNT.h
PULONG32 typedef ULONG32 *PULONG32;
BaseTsd.h
PULONGLONG typedef ULONGLONG *PULONGLONG;
WinNT.h
PULONG64 typedef ULONG64 *PULONG64;
BaseTsd.h
PFLOAT typedef FLOAT *PFLOAT;
WinDef.h
LPBOOL typedef BOOL far *LPBOOL;
WinDef.h
LPWORD typedef WORD *LPWORD;
WinDef.h
LPDWORD typedef DWORD *LPDWORD;
WinDef.h
LPINT typedef int *LPINT;
WinDef.h
LPLONG typedef long *LPLONG;
WinNT.h

上面是對 windows 的基本類型進(jìn)行指針定義,。

 

2.6 VOID 類型

類型
定義為
頭文件
VOID #define VOID void
WinNT.h
PVOID typedef void *PVOID;
WinNT.h
LPVOID typedef void *LPVOID;
WinNT.h
LPCVOID typedef CONST void *LPCVOID
WinNT.h

 

2.7 消息類型

類型
定義為
頭文件
LPARAM typedef LONG_PTR LPARAM;
WinDef.h
WPARAM typedef INT_PTR WPARAM;
WinDef.h
LRESULT typedef LONG_PTR LRESULT;
WinDef.h

這兩個(gè)消息的參數(shù)類型是指針的精度,,在 x86 上是 32 位,在 WIN64 下是 64 位,。

LRESULT 類型用于消息過程的返回值,,在 WIN64 下是 64 位。

 

2.8 調(diào)用約定

類型
定義為
頭文件
WINAPI #define WINAPI __stdcall
WinDef.h
APIENTRY #define APIENTRY WINAPI
WinDef.h
CALLBACK #define CALLBACK __stdcall
WinDef.h

這三種調(diào)用約定在 x86 平臺(tái)下都是定義為 __stdcall 調(diào)用約定

 

2.9 Windows 的 Handle 類型

類型
定義為
頭文件
HANDLE typedef PVOID HANDLE;
WinDef.h
HBIMMAP typedef HANDLE HBITMAP;
WinDef.h
HBRUSH typedef HANDLE HBRUSH;
WinDef.h
HCOLORSPACE typedef HANDLE HCOLORSPACE;
WinDef.h
HCONV typedef HANDLE HCONV;
WinDef.h
HCONVLIST typedef HANDLE HCONVLIST;
WinDef.h
HCURSOR typedef HANDLE HURSOR;
WinDef.h
HDC typedef HANDLE HDC;
WinDef.h
HDDEDATA typedef HANDLEHDDEDATA;
WinDef.h
HDESK typedef HANDLE HDESK;
WinDef.h
HDROP typedef HANDLE HDROP;
WinDef.h
HDWP typedef HANDLE HDWP;
WinDef.h
HENHMETAFILE typedef HANDLE HENHMETAFILE;
WinDef.h
HFILE typedef int HFILE;
WinDef.h
HFONT typedef HANDLE HFONT;
WinDef.h
HGDIOBJ typedef HANDLE HGDIOBJ;
WinDef.h
HGLOBAL typedef HANDLE HGLOBAL;
WinDef.h
HHOOK typedef HANDLE HHOOK;
WinDef.h
HINSTANCE typedef HANDLE HINSTANCE;
WinDef.h
HKEY typedef HANDLE HKEY;
WinDef.h
HKL typedef HANDLE HKL;
WinDef.h
HLOCAL typedef HANDLE HLOCAL;
WinDef.h
HMENU typedef HANDLE HMENU;
WinDef.h
HMODULE typedef HINSTANCE HMODULE;
WinDef.h
HMONITOR typedef HANDLE HMONITOR;
WinDef.h
HPALETTE

typedef HANDLE HPALETTE;

WinDef.h
HPEN typedef HANDLE HPEN;
WinDef.h
HRESULT typedef LONG HRESULT;
WinNT.h
HRGN typedef HANDLE HRGN;
WinDef.h
HRSRC typedef HANDLE HRSRC;
WinDef.h
HWINSTA typedef HANDLE HWINSTA;
WinDef.h
HWND typedef HANDLE HWND;
WinDef.h

HFile 被定義為 singed int 類型,,HRESULT 被定義為 LONG

其它的 HANDLE 類型都被定義為 PVOID


版權(quán) mik 所有,,轉(zhuǎn)載請注明出處!

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多