如何将LPCTSTR类型数据转换成char数组

 我来答
司马刀剑
高粉答主

2017-09-03 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7436万
展开全部
首先,我们看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函数做编码转换了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式