引用 LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别

1、ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式。ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节。

2、Unicode:用两个字节表示一个字符的编码方式。比如字符‘A‘在ASCII下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用“0”填充;函数‘程‘在ASCII下面用两个字节表示,而在Unicode下面也是用两个字节表示。Unicode的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。

3、Windows下的程序设计可以支持ANSI和Unicode两种编码方法的字符串,具体使用哪种就要看定义了MBCS宏还是Unicode宏。MBCS宏对应的字符串指针为LPSTR(即char*),Unicode对应的指针为LPWSTR(即unsigned char*)。为了写程序的方便,微软定义了类型LPTSTR,在MBCS下它表示char*,在Unicode下它表示unsigned char*,这就可以重定义一个宏进行不同字符集的转换了。

4、关系

LPSTR: 32bit指针 指向一个字符串,每个字符占1字节。 相当于 char *

LPCSTR: 32-bit指针 指向一个常字符串,每个字符占1字节。 相当于 const char *

LPTSTR: 32-bit指针 每字符可能占1字节或2字节,取决于Unicode是否定义

LPCTSTR:32-bit指针 指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义

LPWSTR: 32-bit指针,指向一个unicode字符串的指针,每个字符占2字节。

LPCWSTR:32-bit指针, 指向一个unicode字符串常量的指针,每个字符占2字节。

在上面的类型中,L表示long, P表示指针,C表示constant, T表示指针指向的字符占的字节数取决于Unicode是否定义,W表示wide,STR就是string的意思

LPSTR = char *

LPCSTR = const char *

LPTSTR = _TCHAR * (或 TCHAR *)

LPCTSTR = const _TCHAR * (或 const TCHAR *)

LPWSTR = wchar_t *

LPCWSTR = const wchar_t *

5、Windows使用两种字符集ANSI和Unicode,前者在处理英文字符时使用单字节方式,在处理中文字符时使用双字节方式。后者不管是英文字符还是中文字符都是采用双字节方式表示。Windows NT的所有与字符有关的函数都提供了两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字符常量相关,如_T("你好!");。如果编码方式为ANSI,_T不起任何作用;如果编码方式为Unicode,编译器会把"你好!"以

Unicode方式进行保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以Unicode方法保存。

6、L表示字符串资源采用Unicode编码方式,示例如下:

wchar_t Str[]=L"Hello World!"; //每个字符都用2个字节来存储

7、_T是一个适配宏。当定义了_UNICODE时,_T和L相同;否则,_T的字符串采用ANSI编码方式。示例如

下:

LPTSTR lptStr=new TCHAR[32];

TCHAR* szBuf=_T("Hello");

以上两个语句,无论是在ANSI编码方式,还是在Unicode编码方式下都是正确的。

8、微软推荐使用相匹配的字符串函数。例如,在处理LPTSTR或LPCTSTR的时候,应该使用_tcslen来替代strlen函数。否则,在Unicode编码方式下,strlen不能处理wchar_t*的字符串。

9、T是一个非常重要的符号(TCHAR、LPTSTR、LPCTSTR、_T()和_TEXT()等),它表示使用一个中间类型,既不明确表示使用MBCS,也不明确表示使用Unicode。到底使用哪种字符集,在编译的时候才决定。

10、注意L 和 _T 的使用方法。

LPTSTR, LPCTSTR, 及_T(常量字符串) 受_T 影响。

介绍字符串类型:char, wchar_t, TCHAR, CHAR, WCHAR.

TCHAR 的定义:

#ifdef UNICODE

typedef wchar_t TCHAR;

#else

typedef unsigned char TCHAR;

#endif

typedef unsigned char CHAR;

typedef unsigned wchar_t WCHAR;

由此可以看出,unsigned char 和 wchar_t 都是基本数据类型, CHAR实施上就是unsigned char, WCHAR为wchar_t ,而TCHAR根据是否支持unicode而不同。

在程序中,可以用的名称有5种,unsigned char(CHAR), wchar_t(WCHAR), TCHAR, 但为了扩展性和兼容性,推荐使用TCHAR.

时间: 2024-10-15 10:00:35

引用 LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别的相关文章

LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别

引用 LPSTR.LPCSTR.LPTSTR.LPCTSTR.LPWSTR及LPCWSTR的意义及区别 1.ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式.ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节. 2.Unicode:用两个字节表示一个字符的编码方式.比如字符'A'在ASCII下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用“0”填充:函数'程'在ASCII下面用两个字节表示,而在Unicode下面也是用两个字节表

ANSI与Unicode编码,TCHAR | LPSTR | LPCSTR | LPWSTR | LPCWSTR | LPTSTR | LPCTSTR 的含义

一个字符可以用1-byte表示,即ANSI编码: 一个字符也可用2-bytes表示,即Unicode编码(Unicode其实还包含了更多内容,不止2-bytes). Visual C++支持char和wchar_t作为ANSI和Unicode的原始数据类型. 例如 char cResponse; // 'Y' or 'N' char sUsername[64]; // str* functions 以及 wchar_t cResponse; // 'Y' or 'N' wchar_t sUser

LPSTR LPCSTR LPWSTR LPCWSTR区别

LPSTR   一个32位的指向字符串的指针    LPCSTR   一个32位的指向字符串常量的指针    LPWSTR   一个32位的指向unicode字符串的指针    LPCWSTR   个32位的指向unicode字符串常量的指针 前面的L代表LONG,P就是指针的意思,C就是constant的意思,W是wide的意思,STR就是string的意思 LPSTR = char *LPCSTR = const char *LPWSTR = wchar_t *LPCWSTR = const

LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR的来源及意义

1. Unicode字符集: 它是用两个字节表示一个字符的方法.比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节.UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义. 2. MCBS字符集: 即多字节字符集,它是不定长表示世界文字的编码.MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因),但

LPTSTR、LPCSTR、LPCTSTR、LPSTR的来源及意义

UNICODE:它是用两个字节表示一个字符的方法.比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节.UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义. MBCS,它是多字节字符集,它是不定长表示世界文字的编码.MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因),但表示其他文字时就需要用多字

LPTSTR、LPCSTR、LPCTSTR、LPSTR

LPTSTR.LPCSTR.LPCTSTR.LPSTR的意义: LPSTR:  32-bit指针 指向一个字符串,每个字符占1字节LPCSTR:  32-bit指针 指向一个常字符串,每个字符占1字节LPCTSTR: 32-bit指针 指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义LPTSTR:  32-bit指针 指向一个字符串,每字符可能占1字节或2字节,取决于Unicode是否定义

cad.net 利用win32api实现一个命令开关参照面板

首先cad的参照面板很奇葩,如果直接发送 Externalreferencesclose 无论是否有面板,他都会闪烁一下,所以我要判断是否已经打开了参照面板. 然而cad自己没有相关的系统变量.这时我就需要利用到win32api来判断程序是否打开了参照面板了. 首先学习的是 https://blog.csdn.net/bcbobo21cn/article/details/50930221 这篇文章很好的说明了c#如何调用win32api,以及大家可能遇到的各种问题. 我来存一下: Win32 A

C++ 之 字符 字符串

摘自百度百科 LPCTSTR,LPWSTR, PTSTR, LPTSTR,wchar_t区别 L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义.即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的. P表示这是一个指针. T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者

Windows Unicode相关

====头文件前后顺序影响TCHAR定义===============================windows.h winnt.htchar.h======定义_UNICODE宏常量控制==================//字符typedef char TCHAR;typedef wchar_t TCHAR; 字符串typedef __T(x) L##xtypedef __T(x) x //C库函数#define _tcslen strlen#define _tcslen wcslen#