串口通信程序中十六进制格式发送和接收实现 | 您所在的位置:网站首页 › 16进制中的a › 串口通信程序中十六进制格式发送和接收实现 |
上位机软件(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='A')&&(c='a')&&(c char h=str[0]; t=HexChar(h); data[0]=(BYTE)t; rlen++; } //data.SetSize(len/2); for(int i=0;i 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 |
CopyRight 2018-2019 实验室设备网 版权所有 |