定义
(参考 : MSDN)
LPCWSTR
: An LPCWSTR is a 32-bit pointer to a constant string of 16-bit Unicode Charactor, which may be null-terminated.
This type is declared as follows:
typedef const wchar_t * LPCWSTR;
是一个指向16位unicode编码的常量字符串的32位指针,这个字符串可以是以空字符结尾的(即'\0'
)
LPCTSTR
: A 32-bit pointer to a constant character string that is portable for Unicode and DBCS. 是一个指向常量字符串的32位指针,便于在Unicode和DBCS1中使用
L : Long表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P : Pointer 表示这是一个指针
C : Const表示是一个常量
T : 表示_T宏
W : Wide表示wchar_t类型
STR : 表示这个变量是一个字符串
CString
和 LPCTSTR
可以通用。 原因在于CString
定义的自动类型转换
常量字符串ansi和unicode的区分是由宏_T
来决定的。但是用_T("abcd")
时, 字符串"abcd"
就会根据编译时是否定是_UNICODE
来决定是char *
还是 wchar_t *
。 同样,TCHAR
也是相同目的字符宏。
再补一个链接说明:
char、wchar_t、char16_t、char32_t
转换
1.char *
转换成 wchar_t *
char s[1024] = "hello,world!";
int num = MultiByteToWideChar(0,0,s,-1,NULL,0);
wchar_t *w_s = new wchar_t[num];
MultiByteToWideChar(0,0,s,-1,w_s,num);
分析:
-
num 获得
wchar_t *
变量所需的空间 -
MultiByteToWideChar() 表示将
char *
中的字符copy到wchar_t *
指向的内存中。其中 -1 表示拷贝至s中的'\0'
处,num表示拷贝的字节个数。
2.wchar_t *
转换成 char *
wchar_t w_s[1024] = L"hello,world!";
int num = WideCharToMultiByte(CP_OEMCP,NULL,w_s,-1,NULL,0,NULL,FALSE);
char *s = new char[num];
WideCharToMultiByte (CP_OEMCP,NULL,w_s,-1,s,num,NULL,FALSE);
DBCS是ASCII,较高的128个代码中的某些总是跟随著第二个位元组(位,Bit)。这两个位元组(位,Bit)一起(称作首位元组和跟随位元组)定义一个字元,通常是一个复杂的象形文字。虽然中文、日文和韩文共用一些相同的象形文字,但显然这三种语言是不同的,而且经常是同一个象形文字在三种不同的语言中代表三件不同的事。Windows支持四个不同的双位元组字元集:内码表932(日文)、936(简体中文)、949(韩语)和950(繁体汉字)。只有为这些国家(地区)生产的Windows版本才支持DBCS。明白Unicode和DBCS之间的区别很重要。Unicode使用(特别在C程式设计语言环境里)宽字元集。Unicode中的每个字元都是16位元宽而不是8位元宽。在Unicode中,没有单单使用8位元数值的意义存在。相比之下,在双位元组字元集中我们仍然处理8位元数值。有些位元组自身定义字元,而某些位元组则显示需要和另一个位元组共同定义一个字元。
(来源:百度百科) ↩︎