hur.cn - 华软网

 热门搜索

询问转换字符问题,在线等......

  作者:未知    来源:网络    更新时间:2011/1/14
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  该怎么改呢?
---华软 网友回答---
mbtowc
---华软网友回复---
C++">
//***************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';

---华软网友回复---
由于我一次读取不全,需要二次读取 

但好像读取后给CString赋值就只是#512354
---华软网友回复---
是否是发送端自己加入了额外的帧格式信息?
你把byRecv的前20个字节左右的数据发复制了发上来看看
---华软网友回复---



---华软网友回复---
#516607后面的数据才是我想要的 

但我不知道怎么付给CString
---华软网友回复---
use_conversion;
宽字节=a2w(asnscii)
---华软网友回复---
假定你需要的字符时从第n个字节起头的,试试这个:
CString strRead(byRecv+n);

但你的byRecv是ansi的,要先转换成unicode才行啊

你问问发送数据给你的人他是怎么编码的,前面那个#516607有可能是他自己加入的帧格式
---华软网友回复---
引用 8 楼 varding 的回复:
假定你需要的字符时从第n个字节起头的,试试这个:
CString strRead(byRecv+n);

但你的byRecv是ansi的,要先转换成unicode才行啊

你问问发送数据给你的人他是怎么编码的,前面那个#516607有可能是他自己加入的帧格式


#516607就是字符串  后面都是二进制资料
---华软网友回复---
        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没有获得呀
---华软网友回复---

strRead里连乱码都没有吗?你把byRecv前20个字节左右数据发上来

像这样选中监视窗口里的数据再复制:


---华软网友回复---

---华软网友回复---
strRead里面没有乱码  和我用调试助手获得的二进制一样

---华软网友回复---
这样我能掏出来 但全是二进制码了

            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;      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。