调试程序中随手记,并记下一些问题,未整理和总结,刚开始学,遇到太多新知识,定期会分类整理。
此为中设计一个socket通信中,所记录。
MFC平台 C++语言 tcp udp两种都有。
----------------------
1.CString 是MFC中的
string 是C++中的,两者的关系区别呢?
查
2.winsock中send函数 send(SOCKET s, const char*buf, len, int flags)中,所要发送的数据buf是char类型的
同样,接收函数rev(SOCKET s, const char*buf, len, int flags)中,所接收的数据buf是char类型的
MFC中,中文本框中显示收到的消息函数:ClientItem.m_pMainWnd->SetRevBoxText(_T(">>") + strMsg)中,strMsg必须是CString类型的。于是需要char类型转CString类型。
3.char转CString
可以直接转,如 char s; CString strMsg=s;
更多转换参考:
MFC中char*,string和CString之间的转换
如果是字母类(
不知说法是否准确)如"akdg",直接转没问题。
但是,当所接收到char数据是16进制如char s[2] = {0x4d, 0x3a} 时,希望显示的还是16进制数,这就出问题了。如下图:
试了许多方法,都不行,出现烫是好像因为字符超出的问题,最终找到解决办法:
char binstr[256] = { 0 };
for (i = 0; i < 2; i++)
{
sprintf(binstr, "%.2x", s[i]);
strMsg += binstr;
}
{
sprintf(binstr, "%.2x", s[i]);
strMsg += binstr;
}
这样一个一个把他格式化,再转为CString类型就可以啦!输出结果为4d3a
但是这样的数据不能超过7e,不然就没有ascii码对应了,即126最大,具体为什么,我也不清楚。
sprintf函数的用法,再收集整理了。
//第一次中csdn发文,编辑器好难用!!!