在进行Win32编程时,经常会遇到char、LPSTR、PCTSTR、LPTSTR等多种文字(字符串)数据类型,如何区分这些种类繁多、相似的数据类型?这和c语言的CHAR有什么关系?

首先,C语言下的默认字符串类型为char,该字符串类型与ANSI条例相同。1字节的低7位用于保存ASCII代码,多个字符表示以空x00结尾的字符串。但是,符号太多,无法全部用256个字符概括,因此会出现unicode、UTF、BIG5等多字节编码方案。例如,windows通常使用unicode编码方案,该编码由两个字节组成一个字符,因此Windows编程具有默认的双字节编码类型wchar_t。这实际上是16位数,没有符号。因为这一切都可能出现在同一个系统中,根据必要的规定,我如何区分我要定义的字符串,所以Windows中出现了这么多不同的类型定义,下面的小编解释了如何区分这些繁琐的win32数据类型。

Win32文字类型的默认创建规则如下:

w:表示宽度(宽度)。也就是宽字符的意思。

l:表示长度(长),在16位系统中表示16位的段地址16位偏移地址。

n:表示近距离(near),表示16位系统上16位段内的地址。事实上,在32代系统中,这已经没有意义,没有“近距离”问题。都一样。

p:表示指针。

c:表示常数(const),通常是指针和常数指针等。

表示T: Win32下的宏_T。此宏的存在是为了与ANSI版本和unicode版本程序兼容。也就是说,如果定义了UNICODE,或者_ UNICODE表示wchar_t,否则表示char。

CH:代表文字(char)。

STR:表示字符串。

如果你还记得这些短信的意思,恭喜你。Windows中的字符串、文字指针等定义已经掌握。大卫亚设,Northern Exposure)让我举几个例子。

char是指CHAR。

PCH,WCHAR表示宽字符wchar _ t。

PSTR、LPSTR和NPSTR是字符串指针char *;

PCSTR、LPCSTR表示字符串常数指针CONST CHAR *;

PWCHAR、PWSTR和LPWSTR是宽字符串指针WC har _ t *;

PCWSTR、LPCWSTR是宽字符串常量指针constwchar _ t *;

TCHAR是unicode或_ unicode定义为wchar_t表示wchar _ t;否则为char

PTSTR、LPTSTR表示TCHAR的指针,每个定义的宽度都不同。

LPCTSTR表示TCHAR的字符串常量指针,每个定义的宽度都不同。

怎么样?现在看这个眼花缭乱的字符串和文字指针的定义,已经是小菜一碟了吧?

实际上,在Windows平台上,除了这些字符类型定义外,还根据W和_T分别指定为宽字符,编译时是选择unicode、_ unicode定义还是1字节来区分所有字符串函数。例如,查找字符串长度。

Strlen:ANSI版本,单字节编码。

wcs len:unicode版本,双字节编码。

_tcslen:由宽字节版本或单字节版本决定,具体取决于编译时是否定义了UNICODE、_ UNICODE。

Printf、wprintf、_tprintf等也是如此。

由于两个不同的字符集,应该如何定义常量字符串?例如:

“This is a test!”

这个字符串是ANSI还是unicode?以前我们知道的应该是char的字符串,怎么定义相同的宽字符串呢?Microsoft通过在字符串前放置字符“L”来表示宽字符串,使用_T()、__T()、_TEXT()、TEXT()、TEXT()等来表示编译时是否定义了unicode

Charstr1 []="this is a test!"。定义//ANSI字符串

WCHAR str2[]=L "This is a test!“;//定义宽字符串

Tcharstr3 []=text ("this is a test!"));//也可以用_ t(“XXX”)等表示,并在编译时根据定义确定

在Win32平台上编写程序时,ANSI和unicode版本都可以正常工作,因此建议以后使用带有_t的字符串处理函数。例如,微软的WinCE嵌入式平台默认情况下仅支持unicode编码的字符串。如果要在PC上开发并移植到WinCE中,建议您选择从头开始以_t开头的字符串函数。

如果大家对编程感兴趣,想学习更多的编程知识、解决编程问题、咨询编程,请关注Java高手、C /C高手和windows/Linux高手程序员交互联盟(coder_online)的微信号码。