如题,怎样把char型数组转换为LPCTSTR类型
1个回答
展开全部
首先,我们看LPCTSTR的定义(VC/MFC的源代码中可以找到,这里为了便于理解,简化一下):
#ifdef UNICODE
typedef unsigned short TCHAR
typedef const unsigned short LPCTSTR;
#else /* UNICODE */
typedef char TCHAR
typedef const char *LPCSTR
#endif /* UNICODE */
从这里我们可以看出,在非UNICODE模式下,LPCTSTR就是char* 的常量指针,而UNICODE下,是双字节常量指针。
拆解LPCTSTR的定义,LP代表“远”指针(参考C/C++指针定义),C代表const常量,T代表TCHAR可变字符,STR代表string字符串,综合起来,就是可变字符常量指针。
因此在非UNICODE下,我们可以直接将char数组通过强制转换变成LPCTSTR,但在UNICODE环境下,这是不行的:
char a[] = "123";
LPCTSTR pStr = (LPCTSTR)a;
VC/MFC编程,推荐能够自适应UNICODE和非UNICODE(多字节字符集)两种模式,这里我们可以不管是否UNICODE,都实现转换,VC为我们提供了多种转换方法:
//利用CString的运算符重载中的编码转换实现
char a[] = "123";
CString cstr = a;
LPCTSTR pStr = LPCTSTR(cstr);
如果是常量字符串数组,我们可以直接使用_T("")这个宏来实现:
LPCTSTR pStr = _T("123");
在非MFC环境下,稍微麻烦一些,ATL中有A2W宏可以使用,SDK中,就只能使用MultiByteToWideChar函数做编码转换了。
#ifdef UNICODE
typedef unsigned short TCHAR
typedef const unsigned short LPCTSTR;
#else /* UNICODE */
typedef char TCHAR
typedef const char *LPCSTR
#endif /* UNICODE */
从这里我们可以看出,在非UNICODE模式下,LPCTSTR就是char* 的常量指针,而UNICODE下,是双字节常量指针。
拆解LPCTSTR的定义,LP代表“远”指针(参考C/C++指针定义),C代表const常量,T代表TCHAR可变字符,STR代表string字符串,综合起来,就是可变字符常量指针。
因此在非UNICODE下,我们可以直接将char数组通过强制转换变成LPCTSTR,但在UNICODE环境下,这是不行的:
char a[] = "123";
LPCTSTR pStr = (LPCTSTR)a;
VC/MFC编程,推荐能够自适应UNICODE和非UNICODE(多字节字符集)两种模式,这里我们可以不管是否UNICODE,都实现转换,VC为我们提供了多种转换方法:
//利用CString的运算符重载中的编码转换实现
char a[] = "123";
CString cstr = a;
LPCTSTR pStr = LPCTSTR(cstr);
如果是常量字符串数组,我们可以直接使用_T("")这个宏来实现:
LPCTSTR pStr = _T("123");
在非MFC环境下,稍微麻烦一些,ATL中有A2W宏可以使用,SDK中,就只能使用MultiByteToWideChar函数做编码转换了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询