- 36
- 0
- 约2.05千字
- 约 3页
- 2017-11-20 发布于北京
- 举报
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
您可能关注的文档
最近下载
- (正式版)C-J-T 3008.3-1993 城市排水流量堰槽测量标准巴歇尔水槽.docx VIP
- (新教材)2026年春期部编人教版二年级下册语文教学计划及进度表.pdf
- 冀教版小学二年级数学下册课件《认识分米、米》.ppt VIP
- 火灾事故现场处置应急演练记录.docx VIP
- 化工安全与环保(梁志武)课件 第一章 化工生产安全管理基础.pptx VIP
- 2025山东军转考试真题及答案.doc VIP
- 儿童早期矫正系统讲解.pptx VIP
- 地震应急预案(通用22篇).docx VIP
- (2025年)东南大学艺术设计专业考研真题附答案.docx VIP
- JJF(闽) 1145-2024 恒温振荡器校准规范.pdf VIP
原创力文档

文档评论(0)