怎样将LPTSTR转换为string?有宽字符时就乱码,怎样才行?

阿良chjlcn 2008-08-02 01:03:09
using namespace std;

//怎样将LPTSTR转换为string?有宽字符时就乱码,怎样才行?
string GetStr(LPTSTR value)
{
string str("");

while(*value)
{
str += *value;
value++;
}

return str;
}

int _tmain(int argc, _TCHAR* argv[])
{
LPTSTR str =L"12国3";
string sss = GetStr(str);
cout<<sss<<endl;//输出12?,国变成问号,怎样才行?

str = L"123";//没有宽字符就成功转换
sss = GetStr(str);
cout<<sss;

system("pause");
return 0;
}


...全文
1160 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hagangqiou 2008-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangdeqie 的回复:]
C/C++ code//这么写#include<iostream>#include<string>#include<windows.h>usingnamespacestd;intmain(intargc, CHAR*argv[])
{

LPTSTR lp="ddd";stringstr=(string)lp;
cout<<str<<endl;

system("pause");return0;
}
[/Quote]

这个对!
string str="dddd";
LPTSTR lp=const_cast<char*>(str.c_str());
cout<<lp<<endl;
这个也不错。
arong1234 2008-08-02
  • 打赏
  • 举报
回复
我觉得第一个重要的问题是:你的LPTSTR是合法的LPTSTR么?LPTSTR实际上代表两种类型,LPSTR和LPWSTR,根据_UNICODE宏是否定义在两种类型间切换。而你的代码赋值时使用的时L"12国3"; 后面的内容被固定为LPCWSTR,这样当_UNICODE没定义时,这就是一种内容和类型不匹配的情况,很可能就导致你说的乱码问题。正确的方法应该是

LPCTSTR text = _T("12国3");注意这里的C,看不出任何理由这里应该是LPTSTR,怎么看都应该是LPCTSTR因为你后面的字符串是常量


而赋值给string也不用这么麻烦吧?似乎string str=text即可

[Quote=引用楼主 chjlcn 的帖子:]
using namespace std;

//怎样将LPTSTR转换为string?有宽字符时就乱码,怎样才行?
string GetStr(LPTSTR value)
{
string str("");

while(*value)
{
str += *value;
value++;
}

return str;
}

int _tmain(int argc, _TCHAR* argv[])
{
LPTSTR str =L"12国3";
string sss = GetStr(str);
cout < <sss < <endl;//输出12?,国变成问号,怎样才行?

str = L"123";//没有宽字符就成…
[/Quote]
wangdeqie 2008-08-02
  • 打赏
  • 举报
回复

//我4楼贴的是从LPTSTR 转到string;这个是从string转成LPTSTR ,运行环境:vc6
#include<iostream>
#include<string>
#include<windows.h>
using namespace std;

int main(int argc, CHAR* argv[])
{


string str="dddd";
LPTSTR lp=const_cast<char*>(str.c_str());
cout<<lp<<endl;

system("pause");
return 0;
}
wangdeqie 2008-08-02
  • 打赏
  • 举报
回复

//这么写
#include<iostream>
#include<string>
#include<windows.h>
using namespace std;

int main(int argc, CHAR* argv[])
{

LPTSTR lp="ddd";
string str=(string)lp;
cout<<str<<endl;

system("pause");
return 0;
}
  • 打赏
  • 举报
回复

setlocale(0,"chs");

wcstombs;
lingol 2008-08-02
  • 打赏
  • 举报
回复
宽字符用wstring试试
fibbery 2008-08-02
  • 打赏
  • 举报
回复
直接赋值不行吗?不要一个一个去出来赋值,这样有宽字符一定是乱码!

64,666

社区成员

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

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