串口通信程序中十六进制格式发送和接收实现
来源:互联网 发布:ppt文字环绕图片mac 编辑:程序博客网 时间:2024/05/21 14:52
刚刚用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进制数
char HexChar(char c)
{
if((c>='0')&&(c<='9'))
return c-'0';//将?0-9的Ì?数ºy字Á?字Á?符¤?转Áa为a十º?六¢¨´进?制?格?式º?
else if((c>='A')&&(c<='F'))
return c-'A'+10;//将?A-F的Ì?字Á?符¤?转Áa为a十º?六¢¨´进?制?格?式º?例¤y如¨?字Á?符¤?'C'-'A'+10=12=0x0C
else if((c>='a')&&(c<='f'))
return c-'a'+10;//将?a-f的Ì?字Á?符¤?转Áa为a十º?六¢¨´进?制?格?式º?
else
return 0x10;
}
Str2Hex函数的功能则是将如“66 03 ...”形式的字符串以空格为间隔转换为对应的16进制数并存放在BYTE型(typdef unsigned char BYTE)数组中,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进制显示。
CString RecText,str;
for(int i=0;i<Rlen;i++)
{
str.Format("%02X ",RecBuf[i]);//将接收到的BYTE型数据转换为对应的十六进制
RecText.Append(str);
}
- 串口通信程序中十六进制格式发送和接收实现
- 串口通信程序中十六进制格式发送和接收实现
- 串口通信程序中十六进制格式发送和接收实现
- qt串口十六进制发送和接收
- vb mscomm1串口通信接收发送十六进制数据
- 51串口通信发送和接收
- C51串口中断接收和发送程序
- PIC24串口发送和接收程序
- qt socket通信中接收client发送是十六进制数据包
- MFC串口通信设置及发送、中断接收程序
- C51---串口通信---接收---发送
- 51单片机串口通信(字符串接收和发送)
- 串口通信USART接收程序
- Qt实现十六进制接收文本和显示文本(可用于串口的十六进制)
- ATMEGA16串口发送和中断接收CVAVR程序
- 一个简易的51单片机串口接收和发送程序
- 用串口连接GSM手机发送和接收短消息,在应用程序中如何编程实现?
- 用串口连接GSM手机发送和接收短消息,在应用程序中如何编程实现?
- 《计算机应用》最新引用指标
- 这个操蛋的一周。
- 嵌入式系统/ARM技术:基于Linux的嵌入式网络摄像机设计
- 编程之美2014资格赛 hihoCoder 题目3:格格取数
- 练习:逻辑运算与位运算实现除法运算,加法运算
- 串口通信程序中十六进制格式发送和接收实现
- FFT的详细解释
- Ubuntu手动安装MySQL
- OOP初始化
- POJ 2524 Ubiquitous Religions (带权并查集)
- HDU 1039 Easier Done Than Said?
- 【旋转矩阵】Rotate Image
- linux win7双系统
- OC block的简单使用