BYTE byRecv[10000] = {0};
dwRecv += m_SocketManager.ReadComm( byRecv, TOTAL_SIZE, INFINITE);
得到ASCII编码的byRecv
形式为#512354......   后面接很多二进制码    byRecv是ASCII编码CString strRead(byRecv);//这样我想得到Unicode码,但我发现strRead里面就只是#512354,后面的字符都没有了看了一下#512354后面有个 0  该怎么改呢?

解决方案 »

  1.   


    //***************Ansi转化为Unicode*******************//
    int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szSrc, strlen(szSrc), NULL, 0);
    //分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
    wchar_t* wszString = new wchar_t[wcsLen + 1];
    //转换
    ::MultiByteToWideChar(CP_ACP, NULL, szSrc, strlen(szSrc), wszString, wcsLen);
    //最后加上'\0'
    wszString[wcsLen] = '\0';
      

  2.   

    因为我一次读取不全,需要二次读取 但好像读取后给CString赋值就只是#512354
      

  3.   

    是不是发送端自己加入了额外的帧格式信息?
    你把byRecv的前20个字节左右的数据发复制了发上来看看
      

  4.   

    #516607后面的数据才是我想要的 但我不知道怎么付给CString
      

  5.   

    use_conversion;
    宽字节=a2w(asnscii)
      

  6.   

    假设你需要的字符时从第n个字节开始的,试试这个:
    CString strRead(byRecv+n);但你的byRecv是ansi的,要先转换成unicode才行啊你问问发送数据给你的人他是怎么编码的,前面那个#516607有可能是他自己加入的帧格式
      

  7.   

            while (dwRecv < TOTAL_SIZE)
            {
                dwRecv += m_SocketManager.ReadComm( byRecv, TOTAL_SIZE, INFINITE);
                int n = 0;
                if (byRecv[0] == '#')
                {
                    n = 7;
                }            CString strRead(byRecv + n);
                strReturn += strRead;
            }
    byRecv形式如5楼所示  但我得到的strRead永远是空,后面的数据全没有  转换出错?  
    查看器中byRecv后面确实有值,但CString strRead(byRecv + n);
    后strRead没有得到呀
      

  8.   


    strRead里连乱码都没有吗?你把byRecv前20个字节左右数据发上来像这样选中监视窗口里的数据再复制:
      

  9.   

    strRead里面没有乱码  和我用调试助手得到的二进制一样
      

  10.   

    这样我能取出来 但全是二进制码了            DWORD dwRe = m_SocketManager.ReadComm( byRecv, TOTAL_SIZE, INFINITE);
                int n = 0;
                if (byRecv[0] == '#')
                {
                    n = 7;
                }
                for (n; n < dwRe; n++)
                {
                    CString s;
                    s.Format(_T("%02X"), byRecv[n]);
                    strReturn += s;
                }            dwRecv += dwRe;