VC++ msscom串口编程-十六进制--二进制发送接受数据.docVIP

VC++ msscom串口编程-十六进制--二进制发送接受数据.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VCmsscom串口编程-十六进制--二进制发送接受数据

visual c++/vc/vc6/vs2003/vs2005 msscom串口编程-十六进制/二进制发送、接受数据 2008-12-24 00:46 首先,要注意vs2003下跟vc6的接口不一样(名字变化很有规律,请看前文)。 另外,MSComm里用到的VARIANT, COleVariant类型与CString, BYTE之间的转换,以实现数据的发送和接收。 CString与int的转换,实现对接收来的数据的运算。 一、MSComm和VARIANT VC6自带的串口ActiveX MSComm的对象使用SetOutput()和GetInput()方法实现发送和接收。这两个函数的参数都是VARIANT类型。 void CMSComm::SetOutput(const VARIANT newValue) VARIANT CMSComm::GetInput() 发送过程: VARIANT其实是一个C++结构类型,COleVariant类型对VARIANT做了进一步的封装和扩展,提供了许多新的功能和操作方法,支持OLE自动化,且更容易向其数据成员填入数据。由于COleVariant类型由VARIANT派生而来,因此将COleVariant类型的变量传递给SetOutput函数更为方便。另外,SetOutput的参数newValue类型必须是存放字节类型数据的动态数组。因此,可以利用Visual C++提供CByteArray类型来构造COleVariant类型的对象,并将其传递给SetOutput函数。对CByteArray类型变量的操作相对来说要容易的多,比如其成员函数SetSize可用来设置动态数组的大小,下标操作符[]可用来为其元素赋值等等。 下面的程序代码可实现将存放在缓冲区strBuf中的100个字节的数据通过通讯控件发送出去: …… BYTE strBuf[128]; CByteArray OutBuf; COleVariant varOutput; …… OutBuf.SetSize(100); for(i=0;i100;i++) ?? OutBuf[i] = strBuf[i];//BYTE转CByteArray varOutput = OutBuf;//CByteArray转COleVariant m_pCommDlg-m_Comm.SetOutput(varOutput); …… 或者使用OutBuf.add添加字符。 对于ascii/字符类型的发送,需要转换一次: int CCommWizardDlg::String2Hex(CString str, CByteArray senddata) { int hexdata,lowhexdata; int hexdatalen=0; int len=str.GetLength(); senddata.SetSize(len/2); for(int i=0;ilen;) { ?? char lstr,hstr=str[i]; ?? if(hstr== ) ?? { ??? i++; ??? continue; ?? } ?? i++; ?? if(i=len) ??? break; ?? lstr=str[i]; ?? hexdata=ConvertHexChar(hstr); ?? lowhexdata=ConvertHexChar(lstr); ?? if((hexdata==16)||(lowhexdata==16)) ??? break; ?? else ??? hexdata=hexdata*16+lowhexdata; ?? i++; ?? senddata[hexdatalen]=(char)hexdata; ?? hexdatalen++; } senddata.SetSize(hexdatalen); return hexdatalen; } //这是一个将字符转换为相应的十六进制值的函数 //功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1 char CCommWizardDlg::ConvertHexChar(char ch) { if((ch=0)(ch=9)) ?? return ch-0x30; else if((ch=A)(ch=F)) ?? return ch-A+10; else if((ch=a)(ch=f)) ?? return ch-a+10; else return (-1); } 另外,vs2003/2005下要使用m_pCommDlg-m_Comm.put_Output(varOutput); 具体参考: /it%5Fsecurity/blog/item/ac6647886dfd79b

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档