LPCTSTR LPCWSTR LPCSTR三者的含义和区别

#ifdef UNICODE 
#define LPCTSTR LPCWSTR 
#else 
#define LPCTSTR LPCSTR 
#endif     

LPCTSTR A 32-bit pointer to a constant character string that is portable for Unicode and DBCS. An LPCWSTR if UNICODE is defined, an LPCSTR otherwise. 
LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, 

LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information

 LPCTSTR类型

  如何理解LPCTSTR类型?

  L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。

  P表示这是一个指针

  C表示是一个常量

  T表示在Win32环境中, 有一个_T宏

  这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。(即字符串是ansi还是unicode的区分是由宏_T来决定的,字符串如果由宏_T定义,那么编译时如果是使用unicode方式编译,那么字符串就以unicode的宽字节字符保存,如果以ANSI编译则_T不起任何作用。_T()和_L()的区别在于,_L不管你是以什么方式编译,一律以以 UNICODE方式保存。

Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。

)

  STR表示这个变量是一个字符串

  所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。

  同样, LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义。

        LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。


 如果工程字符集为ANSI情况下,LPCTSTR 就是 const char*(ansi), 是常量字符串(不能修改的)。

 而LPTSTR 就是 char*, 即普通字符串(非常量,可修改的)。

 如果工程字符集为UNICODE情况下,LPCTSTR就是 const wchar_t *(unicode),而LPTSTR就是wchar_t*

转换方法:

LPWSTR->LPTSTR:   W2T();
LPTSTR->LPWSTR:   T2W();
LPCWSTR->LPCSTR: W2CT();
LPCSTR->LPCWSTR: T2CW();
ANSI->UNICODE:    A2W();
UNICODE->ANSI:     W2A();





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值