VC通过串口接收数据然后在多个编辑框中显示的问题 30
串口接收共60个数据,共有30个编辑框,编辑框1-30分别对应接收数据的1-30个数据.我转换成16进制数据在一个编辑框中显示的结果和在30个编辑框中的结果不一样。在一个...
串口接收共60个数据,共有30个编辑框,编辑框1-30分别对应接收数据的1-30个数据.我转换成16进制数据在一个编辑框中显示的结果和在30个编辑框中的结果不一样。在一个编辑框中显示的数据是对的,在那30个编辑框中分别显示的时候就出错了(本来应该显示的是0-30)。
我如果用串口接收30个数据的话,结果又是对的,请各位大侠帮帮忙!
下面是串口接收事件的程序:
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[128],bt[30]; //设置BYTE数组 An 8-bit integer that is not signed.
CString str[30];
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
UpdateData(TRUE);
for(k=0;k<len/2;k++) //将数组转换为Cstring型变量
{
bt[k]=*(char*)(rxdata+k); //字符型
str[k].Format("%2X",bt[k]); //将字符送入临时变量strtemp存放
m_recv1+=str[k];
m_TempData[k].SetWindowText(str[k]);
}
UpdateData(FALSE);
自己已经解决
RThreshold设置为60即可 展开
我如果用串口接收30个数据的话,结果又是对的,请各位大侠帮帮忙!
下面是串口接收事件的程序:
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[128],bt[30]; //设置BYTE数组 An 8-bit integer that is not signed.
CString str[30];
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
UpdateData(TRUE);
for(k=0;k<len/2;k++) //将数组转换为Cstring型变量
{
bt[k]=*(char*)(rxdata+k); //字符型
str[k].Format("%2X",bt[k]); //将字符送入临时变量strtemp存放
m_recv1+=str[k];
m_TempData[k].SetWindowText(str[k]);
}
UpdateData(FALSE);
自己已经解决
RThreshold设置为60即可 展开
1个回答
2013-08-31
展开全部
通信协议是关键吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询