如何和将LPTSTR转化为string

foley_liao 2010-11-11 10:40:50
如题:如何和将LPTSTR转化为string,另外 CString怎么转化为 string,并要防止出现乱码哦。我刚开始学VC,很多东西还不懂,请大家指教
...全文
1290 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
foley_liao 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 mervynx 的回复:]

以上的方法是没有问题的,你要检查你的第二个字符串中的内容,是不是一个合法的字符串
[/Quote]

还是没解决这个问题,想问问你第二种方法怎么解决乱码问题呢
foley_liao 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mervynx 的回复:]

CT2AEX, CW2TEX, CW2CTEX, and CT2CAEX, and the typedef CW2A. 可以使用这些模板类完成转换

std::string CType_cast(CString cstr)
{
#ifdef UNICODE
return std::string(CW2A pszA(cstr.GetString()));
#else
retu……
[/Quote]

我是按照你这样来转换的,可是我又遇到另外一个问题就是:
LPTSTR lpsz = lpRowAB->aRow[0].lpProps[ieidPR_DISPLAY_NAME].Value.lpszA;
LPTSTR lpszMobilePhone = lpRowAB->aRow[0].lpProps[ieidPR_MOBILE_TELEPHONE_NUMBER].Value.lpszA;
string name =ConvertStr(lpsz); //这个转换不出现问题,
string phoneNumber =ConvertStr(lpszOfficePhone) ;//可是这到这时一直出现内存不能读的错误,但是把工程的字符集为unicode后,按一下方式又不会出这个问题,可是又出现乱码,
LPTSTR lpsz =(LPTSTR) lpRowAB->aRow[0].lpProps[ieidPR_DISPLAY_NAME].Value.lpszA;
LPTSTR lpszMobilePhone =(LPTSTR) lpRowAB->aRow[0].lpProps[ieidPR_MOBILE_TELEPHONE_NUMBER].Value.lpszA;
CString name =(CString) lpsz;
CString phoneNumber =(CString) lpszMobilePhone;

这是什么原因呢,希望大家帮帮我……
MervynX 2010-11-12
  • 打赏
  • 举报
回复
以上的方法是没有问题的,你要检查你的第二个字符串中的内容,是不是一个合法的字符串
luciferisnotsatan 2010-11-11
  • 打赏
  • 举报
回复
string是 baisc_string<char>的typedef
wstring是 baisc_string<wchar>
wyfwx 2010-11-11
  • 打赏
  • 举报
回复
string.c_str()

CString::GetBuffer() GetLength()
foley_liao 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 rush2 的回复:]

LPTSTR 这个东西是这样的
C/C++ code
#ifdef UNICODE
typedef LPWSTR PTSTR, LPTSTR; //LPTSTR就是宽字符
#else
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
#endif

当你编译通过时候,说明你的工程是不使用UNICODE的,不通过时候,说明你的工程是使用了UNIC……
[/Quote]

在哪看一个工程是不是使用unicode的呢
玖伍叁柒 2010-11-11
  • 打赏
  • 举报
回复
LPTSTR 这个东西是这样的
#ifdef  UNICODE
typedef LPWSTR PTSTR, LPTSTR; //LPTSTR就是宽字符
#else
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
#endif

当你编译通过时候,说明你的工程是不使用UNICODE的,不通过时候,说明你的工程是使用了UNICODE的。

使用unicode时,楼上的代码就要这样写:
LPTSTR lp = L"sd是的非法fgdfg";
wstring str = lp;//这里不比写(string)或者(wstring),是隐式转换。

foley_liao 2010-11-11
  • 打赏
  • 举报
回复
为什么 LPTSTR lp="sd是的非法fgdfg";
string str=(string)lp;
这个代码在一个地方可以转换成功,而放大同一工程的另一个类中却报如下错误:
错误 1 error C2440: 'initializing' : cannot convert from 'const char [16]' to 'LPTSTR' d:\my documents\visual studio 2005\projects\writeoutlook11_9\writeoutlook1\addcontacts.cpp
错误 2 error C2440: 'type cast' : cannot convert from 'LPTSTR' to 'std::string' d:\my documents\visual studio 2005\projects\writeoutlook11_9\writeoutlook1\addcontacts.cpp
foley_liao 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]

CString可以先转 char * 再转string
你可以搜索下T2A这个宏 还有两个好长的函数 太长了 记不得
[/Quote]
你是不是说的这个函数:
WideCharToMultiByte(CP_ACP,0,wo.GetBuffer(),-1,chr,wo.GetLength(),NULL,NULL);
可是转换后是乱码怎么办?
Csuxiaowu 2010-11-11
  • 打赏
  • 举报
回复
CString可以先转 char * 再转string
你可以搜索下T2A这个宏 还有两个好长的函数 太长了 记不得
MervynX 2010-11-11
  • 打赏
  • 举报
回复
CT2AEX, CW2TEX, CW2CTEX, and CT2CAEX, and the typedef CW2A. 可以使用这些模板类完成转换

std::string CType_cast(CString cstr)
{
#ifdef UNICODE
return std::string(CW2A pszA(cstr.GetString()));
#else
return std::string((cstr.GetString()));
#endif
}

std::string LPTType_cast(LPTSTR cstr)
{
#ifdef UNICODE
return std::string(CW2A pszA(cstr));
#else
return std::string((cstr));
#endif
}

详细介绍见 MSDN
xiao_ke 2010-11-11
  • 打赏
  • 举报
回复
如题:如何和将LPTSTR转化为string,另外 CString怎么转化为 string,并要防止出现乱码哦。我刚开始学VC,很多东西还不懂,请大家指教

#ifdef UNICODE
#define _tstring wstring
#else
#define _tstring string
#endif

LPTSTR ptr = _T("sfdsf");
_tstring str = ptr;

CString altstr= _T("sfdsfs");

str = sltstr.GetBuffer();
玖伍叁柒 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jxnktjlfr1 的回复:]
在哪看一个工程是不是使用unicode的呢
[/Quote]

右键看工程的属性,里面有字符集设置。
hhh_hao 2010-11-11
  • 打赏
  • 举报
回复
CString::GetBuffer()转为string
libinfei8848 2010-11-11
  • 打赏
  • 举报
回复
MSDN吧这样认识比较深入

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧