在进行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)的微信号码。
相关攻略
- 1 【盛大私有化】盛大游戏退市:本月末完成私有化摘录纳斯达克。
- 2 【合拍贷】合作贷款和湖北隆宝担保有限公司达成了战略合作协议。
- 3 【奇酷官网】安全低价销售360奇库手机旗舰版官网
- 4 【简志霖】疑似华为6名员工泄露的调查企业因员工流失而被撕裂的10大著名事件。
- 5 【雅虎博客】雅虎推出即时消息新方式雅虎Livetext
- 6 【雅虎口碑】沉默4年后,阿里和蚂蚁金融投资60亿口碑网“满血”死灰复燃。
- 7 【湖北移动网站】湖北移动:信息诈骗割黑手联合治疗
- 8 【真纯姐】小说:我能把我拥有的一切给你,包括我在内。
- 9 【糗事百科网】GIF列表:请给我拿一个。好吧。拜托。
- 10 【微博收购一直播】家庭教师月薪5万韩元;李自治队被抓了吗?网红柴犬二次拍卖;陕西生三个孩子将被授予半年歌。
-
扫码下载安卓APP
-
微信扫一扫关注我们微信扫一扫打开小程序手Q扫一扫打开小程序
-
返回顶部