| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3088 人关注过本帖
标题:vc MFC串口通信接收到的字符串中提起字符为什么无效
只看楼主 加入收藏
kxywnljz
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-11-4
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:7 
vc MFC串口通信接收到的字符串中提起字符为什么无效
bool CCommDlg::biaozhi=0;

int Str2Hex(CString str,CByteArray &data);
char HexChar();
void CCommDlg::OnComm()  
{
if(stop)return;
VARIANT m_input1;
COleSafeArray m_input2;
long length,i;
BYTE data[1024];
CString str;

if(m_Comm.GetCommEvent()==2) //接收缓冲区内有字符
  {
m_input1=m_Comm.GetInput(); //读取缓冲区内的数据
m_input2=m_input1; //将VARIANT型变量转换为ColeSafeArray型变量
length=m_input2.GetOneDimSize();//确定数据长度
for(i=0;i<length;i++)
m_input2.GetElement(&i,data+i); //将数据转换为BYTE型数组

for(i=0;i<length;i++) //将数组转换为Cstring型变量
{
BYTE a=* (char *)(data+i);
if(m_hex.GetCheck())
str.Format("%X ",a);
else str.Format("%c",a);
m_ReceiveData+=str;
}
if(m_ReceiveData[0]=='7')//&&m_ReceiveData[length-1]==0xE
  biaozhi=1;
else biaozhi=0;
  
  }


  UpdateData(FALSE);//更新编辑框内容

m_SendData="eb 90 eb 90 eb 90";
if(biaozhi)
{
if(m_hexsend.GetCheck())
{
CByteArray data;
int len=Str2Hex(m_SendData,data);
m_Comm.SetOutput(COleVariant(data));//发送数据
}  
else m_Comm.SetOutput(COleVariant(m_SendData));//发送数据
biaozhi=0;
}  
  
}  

在次补充一下,就是当发现接收到的字符串中第一个字符如果为“7”,则自动回复"eb 90 eb 90 eb 90";
实际运行结果发现没有回复,请大侠指点!!!!!!!!!!!我对m_ReceiveData不是很熟悉!!!!!!

[ 本帖最后由 kxywnljz 于 2011-1-18 15:14 编辑 ]
搜索更多相关主题的帖子: 字符串 缓冲区 long 通信 
2011-01-18 15:11
红色警戒
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:19
帖 子:444
专家分:2967
注 册:2005-11-20
收藏
得分:0 
str.Format("%X ",a);
这里要用str.Format("%02X ",a);

2011-01-19 15:34
kxywnljz
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-11-4
收藏
得分:0 
回复 2楼 红色警戒
2#的兄弟,谢谢指点,运用if(m_ReceiveData.GetAt(0)=='7'),达到效果。我要实现的问题是,对收到的数据进行判断,如果里面包含“2C(十六进制)”字符,那就要实现自动下发数据。希望高手指点怎样实现,谢谢!
第二个问题,另我做了如下修改,编译无问题。还望高手指点。
char a[100];
     UpdateData(FALSE);//更新编辑框内容
     {  sscanf(m_ReceiveData,"%s",a); }//将编辑框中的m_ReceiveData数据转换为字符串付给a
 if(a[2]==‘7’)//判断接受的字符串中是否含有“7”,有就自动发送。
这段代码运行发现,当a[0],a[1]时,可以实现判断,但是当a为3时就不行了,请高手指点!
小弟在此谢了!
2011-01-19 17:07
红色警戒
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:19
帖 子:444
专家分:2967
注 册:2005-11-20
收藏
得分:20 
if(m_ReceiveData.Find("2C") != -1) 判断是否含有2C字符

2011-01-19 18:00
kxywnljz
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-11-4
收藏
得分:0 
回复 2楼 红色警戒
你的回答虽然没有解决我的问题,但是你的回答,让我很高兴,给我的的启示作用很大,谢谢你,祝你新年发大财,哈哈,我永远顶你!
2011-01-19 20:48
kxywnljz
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-11-4
收藏
得分:0 
回复 4楼 红色警戒
兄弟,你这方法倒是可行,但是一个数据里难免有相同的数据,所以还是需要解决。我就用了这个
if(m_ReceiveData.GetAt(14)=='2'&& m_ReceiveData.GetAt(15)=='C'),结果发现当参数为0,1时可行,但是改为14,15后发现就不行了,就是if始终为假,还望指教!!!!!!!!!!!!!!!
另注::m_ReceiveData这个为接收框里的CString类型数据,接收到每一次新的数据,m_ReceiveData都做了m_ReceiveData.Empty()处理。
还望指教!!!!!!!!!!!!!!!
2011-01-19 22:27
红色警戒
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:19
帖 子:444
专家分:2967
注 册:2005-11-20
收藏
得分:0 
一般分析数据是要加协议的,协议部分一般加在数据前头。

2011-01-20 16:47
江郎
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-1-30
收藏
得分:0 
借鉴一下~
2011-01-31 15:23
快速回复:vc MFC串口通信接收到的字符串中提起字符为什么无效
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044611 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved