分享

显示本地ip CString 乱码

 3dC 2014-02-04
问:
为什么 
sIP.Format(_T(" 本机IP:%s"), inet_ntoa(addr[0]));出现乱码

CString sIP(inet_ntoa(addr[0]));                 不出现乱码
sIP += inet_ntoa(addr[0]);                       不出现乱码
------------------
试下这样.

in_addr *addr =(in_addr*) *(pHost->h_addr_list);
CString sIP;
sIP.Format(TEXT("本机IP: %d:%d:%d:%d"), 
       addr->S_un.S_un_b.s_b1,
       addr->S_un.S_un_b.s_b2,
       addr->S_un.S_un_b.s_b3,
       addr->S_un.S_un_b.s_b4);
MessageBox(sIP);
—————————————————
你的工程环境是Unicode的吧,inet_ntoa(addr[0])是ANSI风格的。
—————————————————
编码问题。。。
sIP.Format(_T(" 本机IP:%s"), inet_ntoa(addr[0]));出现乱码
--》
sIP.Format(_T(" 本机IP:%s"), CString(inet_ntoa(addr[0])));
-------------
谢谢楼上几位
原来是CString 和 char* 之间的转换问题;

刚才测试了一下 char* 与CString 之间的转换
char* ->CString 
CString类的构造函数 和=号操作符都可行

CString ->char * 
没有完全正确的办法了

char *a=new char[100];
CString str("aaa");
a[i]=str[i];//挨个儿赋值 很明显中文必错
wcstombs(a,str,str.GetLength());//类似于挨个儿赋值 中文必错

a=(char*)str.GetBuffer(str.GetLength());str.LockBuffer();
a=(char *)(LPTSTR)(LPCTSTR)str;
//把str的地址传给a 很明显是错的 除非你这样用它MessageBox((wchar_t*)a);而且str变量被锁定了


---------------
搞错了 不好意思
setlocale( LC_CTYPE, "chs" );
wcstombs(a,str,str.GetLength());

现在中文不会错了


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多