string转换为LPCTSTR成为乱码的问题

zsfn111 2009-06-10 09:38:08
在directx中,把string转换为LPCTSTR时,项目的字符集为unicode
string s="天";
LPCTSTR lpstr = (LPCTSTR)s.c_str();
s里有汉字“天”
结果lpstr的值是乱码
请问如果把这样的S转换为LPCTSTR后为何会出现乱码啊???
...全文
1726 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangdanshaniu 2011-05-27
  • 打赏
  • 举报
回复
学习了
lhf9168 2010-07-22
  • 打赏
  • 举报
回复
打个记号,明天换台电脑就可以找到了
zsfn111 2009-06-10
  • 打赏
  • 举报
回复
知道了,结贴
zhihuizhilv 2009-06-10
  • 打赏
  • 举报
回复 1
使用字符串转换类:
CA2T(s.c_str());
zsfn111 2009-06-10
  • 打赏
  • 举报
回复
不好意思大家,现在才看到这么多热心的回复,眼泪哗哗的
我用了楼上各位大大提供的函数MultiByteToWideChar试了下

wchar_t *w_str;
w_str = new wchar_t[4];
if(!w_str)
delete []w_str;
unsigned char word[3]={0};//word中的汉字是"天"
char arr[3]={0};
//将unsigned char*转换为char*
memcpy(&arr[0], &word[0], 3);
//char[]转换为wchar_t *
MultiByteToWideChar (CP_ACP, 0, arr, -1, w_str, 3);


这时的w_str的值为“天”,但是要转为LPCTSTR的话还是不甚明了,
请知道的再次指点小弟啊,
skyxie 2009-06-10
  • 打赏
  • 举报
回复
项目的字符集为unicode
这时 LPCTSTR 实际就是 (const wchar_t *)
LPCTSTR lpstr = (LPCTSTR)s.c_str(); 你这句就是强制把 string 转换为 wstring

直接使用wstring s = _T("天");
如果非要用 string, 那就 MultiByteToWideChar
wocow3 2009-06-10
  • 打赏
  • 举报
回复
wstring s = _T("天");
rxaliao 2009-06-10
  • 打赏
  • 举报
回复
string s=L"天";
LPCTSTR lpstr = s.GetBuffer(s.GetLength() + 1);
s.ReleaseBuffer();
caitian6 2009-06-10
  • 打赏
  • 举报
回复
MultiByteToWideChar
ArcRain 2009-06-10
  • 打赏
  • 举报
回复
c_str()好象是char*类型的
你用MultiByteToWideChar转一下试试.
rxaliao 2009-06-10
  • 打赏
  • 举报
回复
改为unicode 编译,

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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