Windows中的字符类型和数据类型

1    Windows中的字符类型

Generic-text data type

SBCS

MBCS

UNICODE

TCHAR

char

char

wchar_t

1.1         SBCS

单子节字符集(Single-Byte Character Set),所有的字符都只用一个字节表示。ASCII就是SBCS的一种。SBCS字符串的结束标志是一个单字节表示的0。

C语言中的字符串函数,strcpy()、sprintf( )等只用来处理单字节字符串。

1.2         MBCS

多字节字符集(Multi-Byte Character Set),一些字符用一个字节表示,而另一些字符用多于一个字节表示。在Windows里的MBCS包含两种字符类型,单字节字符(Single-Byte Characters)和双字节字符(Double-Byte Characters)。MBCS字符串的结束标志是一个单字节表示的0。

Micrsoft在CRT(C Runtime Library)中提供处理MBCS字符串的函数:str***( )函数都有对应的MBCS版本_mbs***( )。

1.3         Unicode

Unicode,所有的字符都用两个字节表示。Unicode字符也被称作宽字符。Unicode字符串的结束标志是两个字节表示的0。

Unicode字符类型用wchar_t来表示。Unicode字符和Unicode字符串用前缀L来表示。

C中的字符串函数,wcscpy()、swprintf( )等只用来处理Unicode字符串。

UTF-8是Unicode的一种实现方式,需要注意的是UTF-8中0x00~0x7F之间字符的编码方式和SBCS是一样的,也就是说这些字符只用一个字节表示。

1.3.1       字符串处理函数

Win32中的每个与字符串相关的API都有两个版本。一个版本接受MBCS字符串,另一个接受Unicode字符串。后缀A表明是MBCS版本,后缀W表明是Unicode版本。

例如,在windows中根本没有SetWindowText()这个API,只有SetWindowTextA()和SetWindowTextW( ),而且在<winuser.h>中包含了一些宏:

#ifdef UNICODE

#define SetWindowText SetWindowTextW

#else

#define SetWindowText SetWindowTextA

#endif

所以我们可以使用SetWindowText( )这个API,编译器会根据我们选取的编码方式自动来识别相应的版本。

为了可以在MBCS和Unicode环境下使用同样的代码,Win32中提供了TCHAR类型:

#ifdef UNICODE

typedef wchar_t TCHAR;

#else

typedef char TCHAR;

#endif

另外还需要使用宏_T(x),定义如下:

#ifdef UNICODE

#define _T(x) L##x

#else

#define _T(x) x

#endif

而且Win32中提供了字符串函数TCHAR类型的宏,例如:_tcs***( )宏代替str***( )、_mbs***( )和wcs***( )。 MSDN中Generic-Text Routine Mappings有完整的宏列表。

2    Windows中的数据类型

Windows Data Types

Description

BOOL (32bit)

int                 // TRUE or FALSE

BOOLEAN (8bit)

BYTE           // TRUE or FALSE

BYTE (8bit)

unsigned char

WCHAR (16bit)

wchar_t        // 16-bit Unicode character

WORD (16bit)

unsigned short

DWORD (32bit)

unsigned long

DWORD32 (32bit)

unsigned int

DWORD64 (64bit)

unsigned __int64

DWORDLONG (64bit)

ULONGLONG

SHORT (16bit)

short

INT (32bit)

int

INT32 (32bit)

signed int

INT64 (64bit)

signed __int64

LONG (32bit)

long

LONG32 (32bit)

signed int

LONG64 (64bit)

__int64

LONGLONG (64bit)

__int64

TBYTE

#ifdef UNICODE     WCHAR             #else      unsigned char

TCHAR

#ifdef UNICODE     WCHAR             #else      char      

PSTR / LPSTR

typedef         CHAR *              PSTR/LPSTR;

PWSTR / LPWSTR

typedef         WCHAR *          PWSTR/LPWSTR;

PTSTR / LPTSTR

#ifdef UNICODE     PWSTR/LPWSTR            #else      PSTR/LPSTR

VOID

void

PVOID / LPVOID

typedef         void*     PVOID / LPVOID;

HANDLE

PVOID

HRESULT

LONG

HWND

HANDLE

 

WORD MAKEWORD( BYTE bLow, BYTE bHigh );

BYTE   LOBYTE( WORD wValue );

BYTE   HIBYTE( WORD wValue );

WORD LOWORD( DWORD dwValue );

WORD HIWORD( DWORD dwValue );

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值