我用RS232串口通信程序接收到如下数据
C2 57 00 FF 00 15 11 
BE 57 00 FF 00 16 89 
BB 57 00 FF 00 18 22 
然后在程序中进行如下处理:
void CRS232Dlg::OnComm() 
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
    COleSafeArray safearray_inp;
CString strtemp1;
    LONG len,k;
    BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
    if(m_Comm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
    {             ////////以下你可以根据自己的通信协议加入处理代码
        variant_inp = m_Comm.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++)
}
str1.Format("%d", rxdata[0]+rxdata[1]*256+rxdata[2]*65536 ); 
str2 = rxdata[3]==0xFF?" ":"-";
str3.Format("%d.%d%d%d%d", rxdata[4],rxdata[5]>>4,rxdata[5]&0x0F,rxdata[6]>>4,rxdata[6]&0x0F); 
strtemp1+=str1+str+str2+str3+str;
m_strDest+=strtemp1;
for(k = 0;k<len;k++) //将数组转换为Cstring型变量
        {
          BYTE bt = *(char*)(rxdata+k); //字符型
if (m_ctrlHexdisp.GetCheck())
strtemp.Format("%02X ",bt);
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放 m_RXD+=strtemp;    //加入接收编辑框对应字符串
}
    UpdateData(FALSE); //更新编辑框内容
//memset(rxdata,0x00,len);
}
}
可是处理后数据怎么会产生异常数据呢?结果是这样的:
22466  0.1511
22462  0.1689
13421755 -204.12121212
谁能帮我看看到底是怎么回事,不胜感激!!!

解决方案 »

  1.   

    使用单步跟踪看看safearray中的数据是否为
    C2 57 00 FF 00 15 11  
    BE 57 00 FF 00 16 89  
    BB 57 00 FF 00 18 22  
    这几组数据!
      

  2.   

    C2 57 00 FF 00 15 11   
    BE 57 00 FF 00 16 89   
    BB 57 00 FF 00 18 22 
    -------------------------
    你要把这些转成什么样一个数据?你认为应该是什么样的  
      

  3.   

    哦,不好意思,没说明白,我只是想把源数据的每一行,利用这种转换方式byte buf[7] = {0xC2,0x57,0x00,0xFF,0x00,0x15,0x11}; CString str1,str2,str3; 
    str1.Format("%d", buf[0]+buf[1]*256+buf[2]*65536 ); 
    str2 = buf[3]==0xFF?"+":"-"; 
    str3.Format("%d.%d%d%d%d", buf[4],buf[5] > >4,buf[5]&0x0F,buf[6] > >4,buf[6]&0x0F); 
    AfxMessageBox(str1+str2+str3);
    转换为
    22466 0.1511
    我现在不明白采用什么方式才能将每一行数据都这样转化.谁能帮一下?
      

  4.   

    for之后rxdata的内容对不对?如果没问题就是字串格式化错了
      

  5.   

    我知道写循环,可是我以前得到的数据是CString 类型的,怎么才能得到BYTE数组类型,从而利用循环进行处理呢,我现在就是整不明白了,谁能帮我一下.
      

  6.   

    BYTE rxdata[2048]; 
    你的数据是byte类型的
    str1.Format("%d", rxdata[0]+rxdata[1]*256+rxdata[2]*65536 );  
    str2 = rxdata[3]==0xFF?" ":"-"; 
    str3.Format("%d.%d%d%d%d", rxdata[4],rxdata[5] > >4,rxdata[5]&0x0F,rxdata[6] > >4,rxdata[6]&0x0F); 
    已经转化成CString 类型
    怎么又要转化成BYTE数组类型???不明白你的思路CString转化成int可以用strtoint()
      

  7.   

    CString转化为int 最好用atoi