一个简单的字符串转换问题,请各位帮忙看看怎么回事

lrj2005 2009-04-05 03:42:59
我这儿有两个问题:
1这是一个自定义的消息处理函数
LRESULT CChatDlg::OnRecvData(WPARAM wParam,LPARAM lparam)
{
CString str = (LPCTSTR)(char*)lparam;//监视变量看到(char*)lparam 0x0105fd68 "127.0.0.1 说: d",但是转(LPCTSTR)(char*)lparam为这时显示的都是"㈱⸷⸰⸰‱뗋›d쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌dsaf챤쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌",这是怎么回事? ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > >


CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str += "\r\n";
str += strTemp;
SetDlgItemText(IDC_EDIT_RECV,str);
return 0;
}

问题2:我将一个CString的字符串如str1="haha"(Unicode类型),转换为字符数组就变为cstr[100],就成如下格式:
cstr[0] = 'h'
cstr[1] = '0'
cstr[2] = 'a'
cstr[3] = '0'
...
但是我是通过socket传输数据,这样穿过去读的时候只能读到第一个字符,这种情况改怎么处理和转换,请各位指教,谢谢
...全文
145 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyuntian 2009-04-06
  • 打赏
  • 举报
回复
同意6楼的说法。只要收发双方约定好字符集是没有问题的。
oyljerry 2009-04-05
  • 打赏
  • 举报
回复
对于unicode字符串用wchar_t* 来转换,ansi用char*
cnzdgs 2009-04-05
  • 打赏
  • 举报
回复
1、lparam指向的是一个char数组,而你的项目用的是Unicode字符集,不能直接转换,最好两边用相同的字符集,否则需要用MultiByteToWideChar转换;
2、Unicode字符串不要当作char数组来看。
greatws 2009-04-05
  • 打赏
  • 举报
回复
1、char->wchar_t的转换,要使用MultiByteToWideChar,不能强制转换。
2、传输无所谓是否unicode,只要类型和接收端对应就行了,不要用strlen来获得长度,因为这个函数是用0x00来判断的
lrj2005 2009-04-05
  • 打赏
  • 举报
回复
liuruijun2002@126.com
多谢啊
huliang66 2009-04-05
  • 打赏
  • 举报
回复
你的信箱给我,我把代码发给你。
lrj2005 2009-04-05
  • 打赏
  • 举报
回复
to huliang66
第一个问题按你说的那样,提示如下错误:
c:\documents and settings\wjq\my documents\visual studio 2005\projects\chat\chat\chatdlg.cpp(214) : error C2440: 'initializing' : cannot convert from 'char *' to 'ATL::CStringT<BaseType,StringTraits>'
huliang66 2009-04-05
  • 打赏
  • 举报
回复
1、

LRESULT CChatDlg::OnRecvData(WPARAM wParam,LPARAM lparam)
{
CString str=(char*)lParam;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
SetDlgItemText(IDC_EDIT_RECV,str);
}

2、直接发送CString

CString strSend;
strSend="haha";
sendto(m_socket,strSend,strSend.GetLength()+1,0,
(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
etz2008 2009-04-05
  • 打赏
  • 举报
回复
我觉得用MFC类库中的CSocket类的函数很容易的
只要把cstring转化成一个void类型直接发就可以了
当然也可以直接用API
不过cstring转化成char*指针也可以
www.xizi123.cn

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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