VC/MFC从串口中读取许多组数,怎样筛选其中的某几组数据 收到许多组数据,每组数据都是八个16进制的数在一起,比如其中某组是 99 66 1A 10 22 33 21 00 这样的数据。我现在需要提取出每组数据的排在第四、五、六 的三个数,并将这三个数加成一个新的十进制的数并输出,应该怎么整。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 理解透传输协议,先确保接收到的数据能正确分组然后定义一个结构体,typedef struct _tagGpData_t{ uchar uByte[8]; }GPDATA;剩下的差不多就类似与GPDATA *pGp = (GPDATA*)pRecv; //指向数据组缓冲区int newData = (pGp->uByte[4]<<16) + (pGp->uByte[5]<<8) + (pGp->uByte[6]); 不太懂诶,能讲详细一下吗大神的意思是,在串口通信上,你应该有自己的应用层协议吧,比如另外一方是将数据按怎样的格式发送给你的,这样你自己就能知道想要的数据在哪个位置。就算没有应用协议,你从串口读数据的时候,总会调用ReadFile()吧,该函数的参数中不是需要你自己指定一个接受缓存区吗,而你接收到的数据都是8个一组这样的形式,那么可以在缓存区对象的地址位置上直接提取数据即可啊,如buffer[3+i*8]+buffer[4+i*8]+buffer[5+i*8] 事实上很简单, BYTE buf[]={99 66 1A 10 22 33 21 00};//将收到的数放到bufint a;char *pa=(char*) &a;// 将a的地址转换为字节指针pa[1]=buf[4]; //你自己确定好接收字节顺序对应关系 a的顺序是0字节,是最低位,字节3是最高位,如果你的编码不是16进制形式,需要将buf[i]转换为16进制形式pa[2]=buf[5];pa[3]=buf[6];pa[4]=0;//到此,a的值就是4~6字节的值 临时用一下的话,用串口助手接收,保存成txt,在Excel里面弄吧,还可以画图 char pszRev[1024] = { 0 }; DWORD dwRead(0), dwSend(0); while (1) { if (p->ReadData(pszRev, 1000, dwRead)) //接收数据 { int Data3 = atoi(pszRev + 3);//取第三个数据 int Data4= atoi(pszRev + 4);//取第四个数据 int Data5 = atoi(pszRev + 5);//取第五个数据//自己处理 }} wincore line 993 休假了,呵呵 18天, ^_^办件人生大事 今天谈离职,不知会如何? 想知道 winsock 的 connect() 函数有什么限制? 多文档菜单的自绘问题??????,十分着急。请高手看看 刚涉足数据库编程,讨教些简单问题和经验兼散分 CComboBox插入问题,很容易,想得分快进来 视频采集卡的问题 vc删除文件问题 sdk下鼠标单击edit控件,弹出子窗口如何实现 MFC 操作excel 再excel中添加超连接 做一个可以从串口提取数据并能够绘出实时图像的程序
然后定义一个结构体,
typedef struct _tagGpData_t
{
uchar uByte[8];
}GPDATA;
剩下的差不多就类似与
GPDATA *pGp = (GPDATA*)pRecv; //指向数据组缓冲区
int newData = (pGp->uByte[4]<<16) + (pGp->uByte[5]<<8) + (pGp->uByte[6]);
就算没有应用协议,你从串口读数据的时候,总会调用ReadFile()吧,该函数的参数中不是需要你自己指定一个接受缓存区吗,而你接收到的数据都是8个一组这样的形式,那么可以在缓存区对象的地址位置上直接提取数据即可啊,如buffer[3+i*8]+buffer[4+i*8]+buffer[5+i*8]
BYTE buf[]={99 66 1A 10 22 33 21 00};//将收到的数放到buf
int a;
char *pa=(char*) &a;// 将a的地址转换为字节指针
pa[1]=buf[4]; //你自己确定好接收字节顺序对应关系 a的顺序是0字节,是最低位,字节3是最高位,如果你的编码不是16进制形式,需要将buf[i]转换为16进制形式
pa[2]=buf[5];
pa[3]=buf[6];
pa[4]=0;//到此,a的值就是4~6字节的值
DWORD dwRead(0), dwSend(0);
while (1)
{
if (p->ReadData(pszRev, 1000, dwRead)) //接收数据
{
int Data3 = atoi(pszRev + 3);//取第三个数据
int Data4= atoi(pszRev + 4);//取第四个数据
int Data5 = atoi(pszRev + 5);//取第五个数据
//自己处理
}
}