上位机软件(MFC)发送给三轴步进电机控制器的指令是用hex方式(也就是16进制方式传送的,而不是Ascii码的形式传送的,比如说‘0’,按照Ascii码的方式传送就是48,而以hex的方式传送就是0,),

刚刚用MFC编写了一个采集和设定中央空调控制板上参数的应用程序,控制板和PC机之间通过485转串口和串口转USB电路实现通信。程序设计中碰到一个问题是PC端对发送和接收数据格式的处理,控制板可以读懂的协议是一组16进制数,如“66 03 0C 00 01 00 01 00 00 00 00 00 3C 00 3E F5 94”,PC端应用程序可以解析的也是由控制板发送的一组16进制数,而串口通信是二进制字节流进行,发送和接收缓冲区均为char型的数组,发送时如何将字符串类型的16进制数转换为对应大小的10进制数并存进缓冲数组呢?下面的函数可供参考:

HexChar函数的功能是将16进制字符由ASCII码转为相应大小的16进制数@

//也就是说利用串口调试助手,选中以Hex方式发送到的复选框,则文本框中的字符都是16进制的,在进行传送带之前需要将这些字符转化为10进制的形式,然后在进行传送,也就是HexChar()函数所实现的功能。

char HexChar(char c)

{

if((c>='0')&&(c<='9'))

return c-'0';//16进制中的,字符0-9转化成10进制,还是0-9

else if((c>='A')&&(c<='F'))

return c-'A'+10;//16进制中的A-F,分别对应着11-16

else if((c>='a')&&(c<='f'))

return c-'a'+10;//16进制中的a-f,分别对应也是11-16,不区分大小写

else

return 0x10;   // 其他返回0x10

}

Str2Hex函数的功能则是将如“66 03 ...”形式的字符串以空格为间隔转换为对应的16进制数并存放在BYTE型(typdef unsigned char BYTE)数组中,data数组作为发送缓冲数组写入串口即可。 实际应用中将BYTE数据类型修改为char。也是可以使用的。

下面的函数是将文本框中的字符串,去除空格,然后将其他的字符转换为char型数据和长度,放到数组data中,以方便下面的串口传送。

int Str2Hex(CString str, BYTE *data)

{

int t,t1;

int rlen=0,len=str.GetLength();

if(len==1)

{

char h=str[0];

t=HexChar(h);

data[0]=(BYTE)t;

rlen++;

}

//data.SetSize(len/2);

for(int i=0;i<len;)

{

char l,h=str[i];

if(h==' ')

{

i++;

continue;

}

i++;

if(i>=len)

break;

l=str[i];

t=HexChar(h);

t1=HexChar(l);

if((t==16)||(t1==16))//判D断?为a非¤?法¤¡§的Ì?16进?制?数ºy

break;

else

t=t*16+t1;

i++;

data[rlen]=(BYTE)t;

rlen++;

}

return rlen;

}

对于接收到的数据,位于接收缓冲区的BYTE数组RecBuf中,如果要以相应大小的16进制形式显示,刚可以将数组中每一个元素以下列格式转换并放入字符串RecText中,即可实现以16进制显示。

下面函数的功能是将char的数据转换为16进制输出。

CString RecText,str;

for(int i=0;i<Rlen;i++)
    {
     str.Format("%02X ",RecBuf[i]);//将接收到的BYTE型数据转换为对应的十六进制
     RecText.Append(str);
    }

串口通信程序中十六进制格式发送和接收实现相关推荐

  1. (二)树莓派Linux环境串口通信编程--AT指令集的发送和接收

    文章目录 一.前言 二.要了解的知识 2.1 termios结构体 2.2 tcflush() 2.3 cfsetispeed()与cfsetospeed() 三.流程图设计与代码实现 serial_ ...

  2. linux串口程序不能,在uclinux下编写串口通信程序,COM2只能发送数据不能接收,是怎么回事呢?...

    菜鸟 2005-08-17 20:59:00    评分 3楼 嵌入式Linux开发板上NFS文件系统的使用 浏览过442次 作者:深圳远峰 近年来,随着计算技术.通信技术的飞速发展,嵌入式产品成为信 ...

  3. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...

    本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...

  4. QT中串口通信程序(转)

    (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三 ...

  5. VC控件MSComm编写串口通信程序

    转载:http://blog.csdn.net/liangzhao_jay/article/details/45647229 在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月 ...

  6. STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序

    1.其里面的的通信协议是是自己定的,这里 是检测到数据的结尾是以0x0d.0x0a结尾,则表示接受的数据完成了,这个数据是我想要的,这样子就不会出现一些错乱的数据信息.其中的0x8000.0x4000 ...

  7. STC15F2K60S2单片机的串口通信程序及相关知识

    一.STC15F2K60S2单片机简介 中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的,且与MCS-51兼容的STC系列单片机.它完全兼容51单片机,是新一代增强型单片机 ...

  8. 详解 Qt 串口通信程序全程图文 (5)

    Qt 串口通信程序全程图文是本文介绍的内容,本节也是最后一节,本节主要讲述的是解决一下重要问题的说明: (下面所说的第一个程序是指第一节中写的那个程序,第二个程序是指第三节更改完后的程序,第三个程序是 ...

  9. 详解 Qt 串口通信程序全程图文 (4)

    Qt 串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题. 1.在窗口中加入一些组合框Combo Box,它们的名称及条目如下: 串口:portName ...

  10. 详解 Qt 串口通信程序全程图文 (3)

    Qt 串口通信程序全程图文是本文要介绍的内容,下面的程序在第一部分中所写的程序上进行了一些改进.加入打开和关闭串口,发送数据等功能. 1.加入了"打开串口","关闭串口& ...

最新文章

  1. .NET EFCore之增删改查
  2. 【算法】Kruskal算法(解决最小生成树问题) 含代码实现
  3. c#2.0的新特性--泛型
  4. 跟面试官侃半小时MySQL事务隔离性,从基本概念深入到实现
  5. mysql config type_mysql_config_editor用法举例
  6. vue生成静态html文件_是否可以将Vue.js模板编译为静态HTML和CSS文件?
  7. 渗透测试专业术语——攻击篇
  8. 单片机蓝牙模块与手机蓝牙通信(3)
  9. 拓扑量子计算机有缺点,一个荷兰硕士生的新模型有助于描述量子计算机中的缺陷和错误...
  10. 本人成功续费了。你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行了。
  11. 研究生英语期末复习(Unit3)
  12. Windows系统IPC$共享与勒索病毒
  13. 卡尔曼滤波估计导弹位置Python代码
  14. 《程序员》12月精彩内容:双11技术决战
  15. 不使用redis,在前后端分离项目的条件下将验证码进行储存
  16. VC中画基准线,随鼠标移动
  17. 量化交易服务器系统选择,量化交易该选取什么云服务器
  18. 【Java】 8.7 使用红-黄-红色渐变来绘制一个填充矩形
  19. SD卡及其写保护功能
  20. Spring Boot 中如何统一 API 接口响应格式?

热门文章

  1. jQuery实现textarea高度根据内容自适应
  2. VS2015 关闭错误列表
  3. 02. 不要试图编写独立于容器类型的代码
  4. 每天一道剑指offer-数值的整数次方
  5. 计算机系统的组成和应用,计算机系统组成与应用领域的考点
  6. mac u盘装linux系统教程,mac上制作linux系统U盘安装盘
  7. pip mysql_config not found_pip安装mysql-python出现mysql_config not found错误
  8. python123.io能不能补交作业_作业分配问题-回溯法-Python3
  9. 浏览器怎么置顶_Windows 10 窗口置顶 bug 解决方案汇总
  10. JavaScript:加载请求本地资源工具StaticResourceUtil.js