- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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和VARIANTVC6自带的串口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转CByteArrayvarOutput = OutBuf;//CByteArray转COleVariantm_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之间的字符,则转换为相应的十六进制字符,否则返回-1char 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
您可能关注的文档
- oracle_11g_r2安装+创建表空间图文说明.docx
- Overcoming shyness 克服胆怯.doc
- Our Army at War – Relevant and Ready….ppt
- pain与ache.ppt
- osprey210 真假对比.doc
- PartOutputCache源码.doc
- PETSc的安装.docx
- PH传感器使用说明.doc
- portent(共4).ppt
- Proe一些小技巧.doc
- 2025年县域居民教育培训消费偏好与渠道拓展研究报告.docx
- 体育用品行业2025年数字化转型案例研究.docx
- 小学班主任职业发展提升计划.docx
- 白皮书:低空经济2025年技术标准与产业升级路径分析.docx
- 2025年医疗行业宏观政策对药品市场的影响与应对策略.docx
- 三四线城市房地产市场2025年政策影响与风险应对策略研究报告.docx
- 制造业自动化升级2025:项目风险评估与智能化转型策略报告.docx
- 工业机器人智能控制技术在智能工厂建设中的应用报告.docx
- 2025年生物质能发电项目投资风险控制策略可行性研究报告.docx
- 动漫IP产业链构建与2025年动漫产业市场前景展望报告.docx
文档评论(0)