CString char * wchar_t*转换问题

逸萌 2009-01-16 04:35:55
问题在代码描述中
#include <iostream>
#include <stdlib.h>
#include <string> 
#include "atlstr.h"

using namespace std;
void main()
{
char *orig = "Hello, 中国World!";
cout << orig << " (char *)" << endl;

// Convert to a wchar_t*
size_t origsize = strlen(orig) + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
wcscat_s(wcstring, L" (wchar_t *)");
wcout << wcstring << endl;//Watch中乱码, 但Console窗口中输出正确

// Convert to a CString
CString cstring(orig);
cstring += " (CString)";
#ifndef _UNICODE
cout << cstring << endl;
#else
cout << cstring << endl;//仅输出地址? Watch中查看正确,但在UNICODE时Memory中查看‘中国’的内容d6 d0 b9 fa变成了2d 4e fd 56
wcout << cstring << endl;//仅输出地址?
wcout << cstring.GetBuffer() << endl;//仅输出英语部分?

//TRACE(_T("%s"), cstring)
#endif
// Convert to a basic_string
string basicstring(orig);
basicstring += " (basic_string)";
cout << basicstring << endl;
}

...全文
368 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Red_Goal 2009-02-02
  • 打赏
  • 举报
回复
http://www.delphibbs.com/keylife/iblog_show.asp?xid=20912
http://www.myispace.cn/clips/c37cf5b7592241b6b1b342e4546a3ab3.htm
http://www.cppblog.com/woaidongmao/archive/2008/11/07/66259.html
逸萌 2009-01-17
  • 打赏
  • 举报
回复
wcout << cstring.GetBuffer() << endl;//仅输出英语部分?
wcout << (LPCTSTR) cstring << endl;//仅输出英语部分?效果一样
逸萌 2009-01-17
  • 打赏
  • 举报
回复
mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);//Watch中乱码, 但Console窗口中输出正确
MultiByteToWideChar(CP_ACP, 0, orig, -1, wcstring, newsize);//Watch中正确, 但Console窗口中仅输出英语部分
逸萌 2009-01-16
  • 打赏
  • 举报
回复
区别CodePage
sys0008 2009-01-16
  • 打赏
  • 举报
回复

int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);

int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);

转换下编码。
逸萌 2009-01-16
  • 打赏
  • 举报
回复
调试wcout < < cstring < < endl时,cstring 转换成了PXSTR了,再跟时就发现不一致
//Watch中乱码, 但Console窗口中输出正确

UNICODE时Memory中查看‘中国’的内容d6 d0 b9 fa变成了2d 4e fd 56 ,为什么?
菜牛 2009-01-16
  • 打赏
  • 举报
回复
CString对cout的<<操作符并不支持,要输出为字符串应该这样:
cout << (LPCTSTR)cstring << endl;

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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