180425 随手记

调试程序中随手记,并记下一些问题,未整理和总结,刚开始学,遇到太多新知识,定期会分类整理。
此为中设计一个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之间的转换
                             WideCharToMultiByte和MultiByteToWideChar函数的用法
   如果是字母类( 不知说法是否准确)如"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;
    }
这样一个一个把他格式化,再转为CString类型就可以啦!输出结果为4d3a
但是这样的数据不能超过7e,不然就没有ascii码对应了,即126最大,具体为什么,我也不清楚。
 sprintf函数的用法,再收集整理了。

可以参考:C++字符串格式化 sprintf、printf

//第一次中csdn发文,编辑器好难用!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值