如何将LPCTSTR类型数据转换成char数组
1个回答
展开全部
首先,我们看LPCTSTR的定义(VC/MFC的源代码液备中可以找到,这里为了便于理解,简化一下):
1
2
3
4
5
6
7
#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环境下,这是不行的:
1
2
char a[] = "123";
LPCTSTR pStr = (LPCTSTR)a;
VC/MFC编程,推荐能够自适应UNICODE和非UNICODE(多字节字符集)两种模式,这里我们可以不管是否UNICODE,都实现转换,VC为我们提供了多种转换方法:
1
2
3
4
//利用CString的运算符重载中的编码转换实现
char a[] = "123";
CString cstr = a;
LPCTSTR pStr = LPCTSTR(cstr);
如果是常量字符串数组,我们可以直接使用_T("")这个宏来实现:
1
LPCTSTR pStr = _T("123");
在非MFC环境下,稍微麻烦一些,ATL中有A2W宏可以使用,SDK中,就只能使用MultiByteToWideChar函数做编码转换了。
1
2
3
4
5
6
7
#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环境下,这是不行的:
1
2
char a[] = "123";
LPCTSTR pStr = (LPCTSTR)a;
VC/MFC编程,推荐能够自适应UNICODE和非UNICODE(多字节字符集)两种模式,这里我们可以不管是否UNICODE,都实现转换,VC为我们提供了多种转换方法:
1
2
3
4
//利用CString的运算符重载中的编码转换实现
char a[] = "123";
CString cstr = a;
LPCTSTR pStr = LPCTSTR(cstr);
如果是常量字符串数组,我们可以直接使用_T("")这个宏来实现:
1
LPCTSTR pStr = _T("123");
在非MFC环境下,稍微麻烦一些,ATL中有A2W宏可以使用,SDK中,就只能使用MultiByteToWideChar函数做编码转换了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询