太原制作公司网站,无锡网站优化公司,集团门户网站建设方案 php,教务管理系统密码忘了怎么办本文实例为大家分享了MFC串口通信发送16进制数据的具体代码#xff0c;供大家参考#xff0c;具体内容如下MFC串口通信会使用m_mscomm控件。发送数据一般是在edit control 里输入自己想发送的内容#xff0c;然后点击send button。如果直接发送字符串内容#xff0c;通过下…本文实例为大家分享了MFC串口通信发送16进制数据的具体代码供大家参考具体内容如下MFC串口通信会使用m_mscomm控件。发送数据一般是在edit control 里输入自己想发送的内容然后点击send button。如果直接发送字符串内容通过下面代码(send button内写入)即可UpdateData(true); //读取编辑框内容m_mscomm.put_Output(COleVariant(m_EditSend));m_EditSend.Empty(); //发送后清空输入框UpdateData(false); //更新编辑框内容但是这样发送的是字符串内容而串口通信常常需要发送16进制数据接收端直接按HEX格式接收就可以了不用再进行字符串转HEX。因此最好在发送端就将字符串转成16进制数据发送下面代码即可实现该功能(1)send buttonCByteArray HexDataBuf;int i 0;BYTE SendBuf[128]{0};BYTE GetData[256]{0};int SendLen 0;int GetLen 0;UpdateData(TRUE);//获取编辑框内容if(m_EditSend.IsEmpty()){AfxMessageBox(_T(发送数据为空!));return;}HexDataBuf.RemoveAll(); //清空数组GetLen m_EditSend.GetLength();for(i0; i{GetData[i] (BYTE)m_EditSend.GetBuffer()[i];}StringtoHex(GetData, GetLen, SendBuf, SendLen);//将字符串转化为字节数据HexDataBuf.SetSize(SendLen); //设置数组大小为帧长度for(i0; i{HexDataBuf.SetAt(i,SendBuf[i]);}m_mscomm.put_Output(COleVariant(HexDataBuf)); //发送十六进制数据UpdateData(false); //更新编辑框内容(2)stringtoHex函数void StringtoHex(BYTE *GB, int glen, BYTE* SB, int* slen){int i; //遍历输入的字符串int a 0;char temp; //接收字符用来判断是否为空格若是则跳过char temp1,temp2; //接收一个字节的两个字符 例如EB则temp1E,temp2 B*slen 0; //输出的16进制字符串长度for(i0;i{temp GB[i];if(temp )continue;if(a 0)temp1 GB[i];if(a 1)temp2 GB[i];a;if(a2){a 0;temp1 temp1 - 0;if (temp110)temp1 temp1 -7;temp2 temp2 - 0;if (temp210)temp2 temp2 -7;SB[*slen] temp1*16temp2;(*slen);}}}通过以上代码即可发送16进制数据如下图是用串口调试工具的仿真结果发送数据字节之间是否存在空格对结果没有影响。另外在数据发送中用到了CByteArray类这是一种支持字节的动态数组详情可在MSDN上查询。以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持脚本之家。