各位大侠帮帮忙啊!我写了个网络程序,抓取数据包,最后显示应用层的数据。
应用层显示于对话框中的CEdit控件中,定义了CString类型的m_appData与之关联。
udp_header* udpHdr=(udp_header*)(ip_hdr+ipHdrLen); //这是获取到的udp数据报的头部指针     char* app_data=(char*)(udpHdr+8);     m_appData.Format(_T("%s"),app_data);
     UpdateData(false);运行后,CEdit控件中输出的全是乱码!是不是跟Unicode有关?请指教!

解决方案 »

  1.   

    感觉和编码有关系
    如果udpHdr 指针指向的Unicode编码的字节流,应该转换为多字节的
    否则,就不能用 char* app_data=(char*)(udpHdr+8); 
      

  2.   

    那么如果是Unicode编码的字节流,如何转换为多字节的呢?谢谢~
      

  3.   

    WideCharToMultiByte(),MSND上有例子。
      

  4.   

            int iSize;
        char* pszMultiByte;     iSize = WideCharToMultiByte(CP_ACP, 0,(wchar_t*)(udpHdr+8) , -1, NULL, 0, NULL, NULL); 
        pszMultiByte = (char*)malloc((iSize+1)); 
        WideCharToMultiByte(CP_ACP, 0, (wchar_t*)(udpHdr+8), -1, pszMultiByte, iSize, NULL, NULL); 
        m_appData.Format(_T("%s"),pszMultiByte);
        UpdateData(false);
    这样转换后,还是输出乱码,是不是要转化为多字节啊?
      

  5.   

    应该是
        char* app_data=(char*)(udpHdr+8); 出现了错误,汗,请不要用指针加上一个数值,那会得到你指针指向的结构大小乘以数值后的地址去!
    请参照:
    //
    struct TEMP
    {char charStr[20];
    };
    //以下位于main程序当中
    char charStr[]="JestForTest";
    int ipHdrLen=4;
    TEMP* udpHdr=(TEMP*)(charStr+ipHdrLen); //这是获取到的udp数据报的头部指针 
        char* app_data=(char*)(udpHdr); //不要加上数值
    CString m_appData;
        m_appData.Format("%s",app_data);
    cout << (LPCTSTR)m_appData << endl;