mfc中,中英文混合字符串截取问题

luohaohahaha 2013-04-10 11:01:30
我定义了一CString m_data = "姓名lh 成绩88";
现在要求任意输入一个起点,终点位置,比如输入1,5,得到"姓名lh成"输入2,3,得到"名l"; 目前我用m_data.Mid函数得到的是乱码,应该怎么处理呢?
...全文
238 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luohaohahaha 2013-04-10
  • 打赏
  • 举报
回复
噢, 这样啊。 我换了UNICODE之后,原来用的CString strIP = inet_ntoa(*(in_addr*)pHost->h_addr); 以及DWORD dwIP=inet_addr(strIP)这两句出现了错误,网上说inet_ntoa和inet_addr这两个函数没有UNICODE版本,我该怎么弄呢? 我写的程序是socket编程,获取IP地址的。
sichuanwww 2013-04-10
  • 打赏
  • 举报
回复
必须用unicode,不然字符的存储空间大小都不一直,怎么操作
无言猪 2013-04-10
  • 打赏
  • 举报
回复
用unicode
luohaohahaha 2013-04-10
  • 打赏
  • 举报
回复
恩 可以了 谢谢各位!
无言猪 2013-04-10
  • 打赏
  • 举报
回复

DWORD dwIP = ntohl(((struct in_addr *)host->h_addr)->s_addr);
luohaohahaha 2013-04-10
  • 打赏
  • 举报
回复
引用 7 楼 lostying 的回复:
C/C++ code ? 1234567 char name[128]; struct hostent *pHost; gethostname(name,128); pHost = gethostbyname(name); DWORD dwIP = pHost->h_addr[0] | pHost->h_addr[1] << 8 | pHost->h_addr[2] << 1……
结果是255.255.255.192
无言猪 2013-04-10
  • 打赏
  • 举报
回复

char name[128];
struct hostent *pHost;
gethostname(name,128);
pHost = gethostbyname(name);
DWORD dwIP = pHost->h_addr[0] | pHost->h_addr[1] << 8 | pHost->h_addr[2] << 16 | pHost->h_addr[3] << 24;
m_IPAddress_Host.SetAddress(dwIP);
如果发现反了,调整一下下标就行了.
luohaohahaha 2013-04-10
  • 打赏
  • 举报
回复
引用 4 楼 lostying 的回复:
用WideCharToMultiByte和MultiByteToWideChar
这是之前的: char name[128]; struct hostent *pHost; gethostname(name,128); //获得主机名 pHost = gethostbyname(name); CString strIP = inet_ntoa(*(in_addr*)pHost->h_addr); DWORD dwIP; dwIP = inet_addr(strIP); unsigned char *pIP = (unsigned char *)&dwIP; m_IPAddress_Host.SetAddress(*pIP,*(pIP+1),*(pIP+2),*(pIP+3)); 按照你说的,这是改后的: char name[128]; CString csname; CString strIP = (CString)inet_ntoa(*(in_addr*)pHost->h_addr); //获取宽字节字符的大小,大小是按字节计算的 int len = WideCharToMultiByte(CP_ACP,0,strIP,strIP.GetLength(),NULL,0,NULL,NULL); //为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小 char * ch = new char[len+1]; //以字节为单位 //宽字节编码转换成多字节编码 WideCharToMultiByte(CP_ACP,0,strIP,strIP.GetLength(),ch,len,NULL,NULL); ch[len+1] = '\0'; //多字节字符以'/0'结束 dwIP = inet_addr(ch); m_IPAddress_Host.SetAddress(dwIP); 问题是:之前的可以正确的自动获取我的IP 192.168.1.100 ,之后的怎么显示255.255.255.255 麻烦再帮我看下啊, 我感觉两个应该得到一个结果的啊。
Eleven 2013-04-10
  • 打赏
  • 举报
回复
引用 3 楼 luohaohahaha 的回复:
噢, 这样啊。 我换了UNICODE之后,原来用的CString strIP = inet_ntoa(*(in_addr*)pHost->h_addr); 以及DWORD dwIP=inet_addr(strIP)这两句出现了错误,网上说inet_ntoa和inet_addr这两个函数没有UNICODE版本,我该怎么弄呢? 我写的程序是socket编程,获取IP地址的。
CString strIP = CString(inet_ntoa(*(in_addr*)pHost->h_addr));
无言猪 2013-04-10
  • 打赏
  • 举报
回复
用WideCharToMultiByte和MultiByteToWideChar

18,356

社区成员

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

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