字符转换问题

wudeshou82666 2010-04-21 09:27:45
将SOCKET收到的20个字节的字符转换为wchar_t,然后再由wchar_t转换为CString对象。要怎么操作才能得到的正确的宽字符显示出来。谢谢!
...全文
147 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinacoding 2010-04-29
  • 打赏
  • 举报
回复
你传过来的是宽字符的话,如下:
char buffer[1024] = {0};
int len = recv(buffer);

// 假定你传过来的数据全是ascII没有汉字先
wchar_t* ptr = (wchar_t*)buffer;
// CString aa = buffer; // 注意这里不能这么做,否则CString 会认为你穿过来的是char字符,会把第一个字节中的'\0'当作字符串的结束符, 但是实际上你buffer保存的是宽字符。
CString aa = ptr;
chinacoding 2010-04-29
  • 打赏
  • 举报
回复
在unicode 版本下 可以直接将char* 赋值给CString,无需再MultiByteToWideChar了。
在ansi版本下 才需要MultiByteToWideChar。

另外就是是看你socket发送方传过来的流编码格式。
ansi, utf8, 还是unicode,这部分内容要要事先约定好或者通过协议格式来判断
yize.link 2010-04-29
  • 打赏
  • 举报
回复

char buffer[256];
int r = recv(socket,&buffer,0);

printf("%s",(const char*)buffer);


这样就可以。
soundbird_qian 2010-04-29
  • 打赏
  • 举报
回复
不太清楚,我用Socket没有这样用过。
char szRecv[20];
int nRecv = m_socket.Receive(szRecv, 10, 0);
if(nRecv >= 0)
{
m_str.Format(_T("%c"), szRecv);
}

这样用不行吗?
myndsc2009 2010-04-29
  • 打赏
  • 举报
回复
char 直接扔给cstring 就行 cstring 会自己去做的
向立天 2010-04-29
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
liwei3290 2010-04-29
  • 打赏
  • 举报
回复
用下面的例子 将 Buff改成你收到的内容

char *Buff;//你收到的内容
TCHAR *wBuff;
CString strReturn = _T("");
//创建新的缓冲区
Buff = new char[256];
wBuff = new TCHAR[256];
memset(Buff, '\0', 256);
memset(wBuff, TEXT('\0'), 256*sizeof(TCHAR));
mbstowcs(wBuff, Buff, 256);
strReturn = wBuff;
delete[] Buff;
//释放wBuff缓冲区
delete[] wBuff;
return strReturn;
shen_wei 2010-04-21
  • 打赏
  • 举报
回复
WCHAR* CMy0402View::ToWchar(char *str)
{
static WCHAR buffer[1024];
wcsset(buffer,0);
MultiByteToWideChar(CP_ACP,0,str,strlen(str),buffer,1024);
return buffer;
}
SullenSun 2010-04-21
  • 打赏
  • 举报
回复
socket接收的是char*
LPCSTR cs = "sadasd";
wchar_t ss = NULL;
MultiByteToWideChar(0,MB_COMPOSITE,cs,10,&ss,6);
songtao_01 2010-04-21
  • 打赏
  • 举报
回复
char *pYouChar;
CString YourCString(pYouChar);
wudeshou82666 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
MultiByteToWideChar(),多字节转成宽字符
[/Quote]、
这样得到的wchar可以直接构造CString 吗?
xiuxianshen 2010-04-21
  • 打赏
  • 举报
回复

wchar_t * _itow(
int value,
wchar_t *str,
int radix
);
Eleven 2010-04-21
  • 打赏
  • 举报
回复
MultiByteToWideChar(),多字节转成宽字符
Eleven 2010-04-21
  • 打赏
  • 举报
回复
wchar_t转换为CString对象
--------------------------------
wchar_t buf[] = L"....";
CString str(buf);
Sou2012 2010-04-21
  • 打赏
  • 举报
回复
MultiByteToWideChar

15,980

社区成员

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

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