• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 在mscomm控件中,如何实现数据包的校验?有代码,我写得好象不对)

在mscomm控件中,如何实现数据包的校验?有代码,我写得好象不对)

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了mscomm控件使用详解,mscomm控件,mscomm控件下载,mscomm控件使用实例,mscomm控件注册等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 在mscomm控件中,如何实现数据包的校验?有代码,我写得好象不对)
描述:


数据包格式如下:
@xx$
求如何实现@与$之间所有字符代码的低4位校验和,再转换成ASCII字符
BOOL CAkcy2008Dlg::OnInitDialog()
{
       // .....省略
//-----------初始化com1-----------------------------
m_MsCom1.SetCommPort(1);            //选择串口号
m_MsCom1.SetInputMode(1);           //以文本方式取回数据(接收)
m_MsCom1.SetInBufferSize(1024);     //设置输入缓冲区大小
m_MsCom1.SetOutBufferSize(10);      //设置输出缓冲区大小(发送)
m_MsCom1.SetSettings("19200,n,8,1");//波特率19200,无校验,8个数据位,1个停止位
m_MsCom1.SetRThreshold (1);         //接收缓冲区>=1个字符时将引发oncomm事件
if(!m_MsCom1.GetPortOpen())           //打开串口
m_MsCom1.SetPortOpen(true);
m_MsCom1.SetInputLen(0);            //读取接收缓冲区中所有的内容 
m_MsCom1.GetInput(); //先预读缓冲区,以清除残留数据
m_MsCom1.SetInBufferCount(0);//清除接收缓冲区
m_MsCom1.SetOutBufferCount(0);//清除发送缓冲区
}
//----------------------------------------------
void CAkcy2008Dlg::OnCom1() 
{
COleSafeArray safearray_inp;
COleVariant myVar;
BYTE rxdata[2048]; 
long len,k;
len=0;
static long checksum; //校验码
switch(m_MsCom1.GetCommEvent())
{
case 2:
CString strtemp;
myVar.Attach(m_MsCom1.GetInput());//读缓冲区
safearray_inp=myVar;  //COleVarian型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
//下面是数据处理函数-------------------------------------------------
for(k=0;k<len;k++)             //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);    
strtemp.Format("%c",bt);       
char ch=(char)bt;              
                                //获取字符串并校验,,,,乱了套了...............................................????????(问题就在这儿)
switch(ch)
{
case '@': //字符串开始
checksum=0; //开始计算CheckSum
sRecStr1="";
break;
case '$'://字符串结束
checksum=checksum & 0x0f;//校验
if (checksum < 10) checksum+= '0'; else checksum += 'A' - 10; 
break;
default: 
sRecStr1+=strtemp;
checksum =checksum^ch;//校验 
break; 
}
}
break;
}
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 请问控制台程序能不能用MSComm控件呢?
  • Mscomm控件问题
  • 请问:VC++中的MSComm控件可以实现PC机和哪种DCE之间的串口通信?
  • 关于使用了MSComm串口控件后的程序的问题,非常着急,在线等
  • mscomm控件在vc++中使用问题
  • 如何在无窗口界面的动态库工程中使用mscomm控件?
  • 使用MSComm串口通信的问题
  • 怎么捕捉到MSComm的异常Exception信号并进行处理啊?
  • mscomm控件串口通信的问题
  • 如何利用MSComm控件传送文件的例子

相关文章

  • 2017-06-05 两个settimer在运行是不是多线程的效果?
  • 2017-06-04 有哪位大哥用VC++做控件好利害呢???
  • 2017-06-05 两个进程通讯的问题。
  • 2017-06-05 自己写的DLL,测试时候老是找不到程序输入点
  • 2017-06-04 关于IEtoolbar的问题苦等要多少分都给你
  • 2017-06-04 非常简单的COM问题
  • 2017-06-05 请教针对日志钩子在按下ctrl+alt+del后自动取消挂钩的问题的解决办法~~
  • 2017-06-05 用WUA接口如何获取windows系统补丁包的类型,比如重要,推荐?
  • 2017-06-05 如何实现软件卸载
  • 2017-06-04 100分求编程经验:请问各位高手有谁实现过类似word中的公式编辑器!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Wtl中的控件是如何发送消息的
    • VC6的addin快捷键映射功能实现
    • HowtohandlescripterrorsasaWebBrowsercontrolhost
    • COM调用的小问题!
    • DirectshowIAMGraphBuilderCallback继承类选择创建filter失败!
    • 期待你的回答,vb,com,asp
    • 窗口指针作DLL参数的问题
    • 关于ATL响应事件的问题!务必请高手帮忙!!!
    • 请问一下,谁有BeauGauge的设计器能不能帮忙设计几个控件!还有一些问题想请教yix
    • vc++如何调用com+的服务?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有