VC++串口通信  接收到一条记录后如何换行,而不是每收到一个字符就换行,如何才能做到

解决方案 »

  1.   

     OnComm函数如下所示,如何在接收到一条记录后,换行输出第二条记录啊,加上“m_strData+="\r\n";”语句后,变成了每个字符会占一行输出,怎么办啊??急需解决
           VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048]; //设置BYTE 数组An 8-bit integerthat is not signed.
    CString strtemp;
    CString strComData;
    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 型数组
    for(k=0;k<len;k++) //将数组转换为Cstring 型变量
    {
    BYTE bt=*(char*)(rxdata+k); //字符型
    strtemp.Format("%c",bt); //将字符送入临时变量strtemp 存放
    m_strData+=strtemp; //加入接收编辑框对应字符串
    strComData+=strtemp;
    }
    deal_with_COMDATA(strComData);      //对接收数据的处理函数,涉及到数据库
                      m_strData+="\r\n";
    }
    UpdateData(FALSE); //更新编辑框内容
      

  2.   


    VARIANT variant_inp; 
    COleSafeArray safearray_inp; 
    LONG len,k; 
    BYTE rxdata[2048]; //设置BYTE 数组An 8-bit integerthat is not signed. 
    CString strtemp; 
    CString strComData; 
    int i=0;
    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 型数组 
    for(k=0;k <len;k++) //将数组转换为Cstring 型变量 

    BYTE bt=*(char*)(rxdata+k); //字符型 
    strtemp.Format("%c",bt); //将字符送入临时变量strtemp 存放 
    m_strData+=strtemp; //加入接收编辑框对应字符串 
    strComData+=strtemp; 

    deal_with_COMDATA(strComData);      //对接收数据的处理函数,涉及到数据库 

    i++;
    if(i==4)  //每5个换一行
    {
    m_strData+="\r\n"; 
    i=0;
    }

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

  3.   

     int j=0;
     for(k=0;k <len;k++) //将数组转换为Cstring 型变量 
        { 
            BYTE bt=*(char*)(rxdata+k); //字符型 
            strtemp.Format("%c",bt); //将字符送入临时变量strtemp 存放 
            m_strData+=strtemp; //加入接收编辑框对应字符串 
            j++;
           if(j==8){
              m_strData+="\r\n";
              j=0;
           }
            strComData+=strtemp; 
        } 
        deal_with_COMDATA(strComData);      //对接收数据的处理函数,涉及到数据库
      

  4.   

    既然知道每八个字符一条 
    就增加一个计数的变量mm
    if(mm%8==0)
    m_strData+="\r\n";
    这样不就可以了么
      

  5.   

      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 型数组
    这段代码有问题,我用debug看了,len始终等于1,下位机发的记录被拆开了,如何才能让len=8呢????
      

  6.   

    嘿,你这个人。如果你的len没问题,我的代码当然对的了。
    你自己前面代码有问题怪谁啊
      

  7.   


    m_ctrlComm.SetRThreshold(8);就行了,我也遇到过