void CComTestDlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
VARIANT variant;//定义VARIANT型变量,用于存放接收到的数据
       COleSafeArray safearray;//定义safearray型变量
       LONG len,k;//定义长整型变量len,k
       BYTE rxdata[2048];//定义BYTE型数组
       CString stremp;//定义一个字符串
       if(m_Com.get_CommEvent() == 2) //判断引起OnCom事件的原因
       {                             //如果是接收到特定个字节数,则读取接收到的数据
              variant = m_Com.get_Input();//把接收到的数据存放到VARIANT型变量里
              safearray = variant;//VARIANT型变量转换为ColeSafeArray型变量
              len = safearray.GetOneDimSize();//得到数据有效长度
              for(k=0;k<len;k++)
              {
                  safearray.GetElement(&k,rxdata+k); //得到接接收到的数据放到BYTE型数组rxdata里
              }
  for(k=0;k<len;k++) //将数组转换为Cstring型变量
  { BYTE bt=*(char*)(rxdata+k); //字符型 stremp.Format(_T("%02X"),bt); //将字符以十六进制方式送入临时变量stremp存放,注意这里加入一个空隔
                
m_ReceiveData1 += stremp; //加入接收编辑框对应字符串
         }
UpdateData(FALSE); //更新编辑框内容
      }
}
我用了MSCOMM控件,然后下位机上传的数据如下:其中 0D 结束标志
00 00 C1 BB 00 00 00 E4 00 00 00 00 00 00 57 BA 00 00 57 7C 00 00 57 C4 00 0B 9A 7F 00 0B 94 DA 00 0B B1 DB FF FF F4 88 00 00 00 00 00 00 00 00 FF FF F4 88 00 02 E0 EC 00 00 00 00 00 00 00 00 00 02 E0 EC 00 02 E1 02 00 00 00 00 00 00 00 00 00 02 E1 02 00 0D DD CD 00 00 00 00 00 00 00 00 00 00 58 50 FF FF FF FF FF FF FF FF 00 00 58 50 00 00 C3 4F 0D现在我想每4个为一组合并,例如: 0000C1BB   000000E4……然后转化成10进制分别放到一个EDIT中去,该怎么做啊?

解决方案 »

  1.   

    你先定义一个整型数(int)变量,正好是四个字节,然后通过移位操作,然后把这个变量赋给EDIT即可!代码很简单,就不详解了!相信你自己可以的!
      

  2.   

    假设协议规定的数据格式是低在前,高在后,那么这样省事:
    int DataBuf[20];//根据要转换的数据个数定,也就是上传的数据(去掉最后一个结束符0D)个数除以4,
    BYTE ReceiveBuff[81];//因为要转换20个四字节的数据,再加上一个结束符,所以共81个
    memcpy(&DataBuff,ReceiveBuff,80);
    这样就行了,如果是高在前,低在后,就不能这么用了,只能用一个循环来组合了
    for(int i=0;i<20;i++)
    {
        DataBuf[i]=(((int)ReceiveBuf[i*4])<<24)|(((int)ReceiveBuf[i*4+1])<<16)|(((int)ReceiveBuf[i*4+2])<<8)|ReceiveBuf[i*4+3];
    }
      

  3.   

     是高位在前 这个怎么弄? 我自己也解决了 不过没用移位 我等它数据接收完 然后用mid一个个分割了出来......感谢您的回答