写了一个串口接收的上位机,字符接收正常,请问怎么实现接收16进制数据并显示在编辑框中,在缓冲区种的数据是“\x1f\xff”这种,要在编辑框显示1f ff,看了其他人的代码像这样variant_inp = m_MSComm.get_Input(); //读缓冲区
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); //字符型
if (m_ctrlHexDiaplay.GetCheck())
strtemp.Format("%02X ", bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c", bt); //将字符送入临时变量strtemp存放 m_EditReceive += strtemp; //加入接收编辑框对应字符串 
}但是会出现程序崩溃的情况,求大神解决将将缓冲区的16进制数据读出来显示在编辑框。

解决方案 »

  1.   

    可能有越界情况
    variant_inp = m_MSComm.get_Input(); //读缓冲区
    safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
    len = safearray_inp.GetOneDimSize(); //得到有效数据长度
    BOOL bHexFlag = m_ctrlHexDiaplay.GetCheck();
    for (k = 0; k<len; k++)
    {
      BYTE bt;
      safearray_inp.GetElement(&k, &bt);//转换为BYTE型数组
      if (bhexFlag)
        strtemp.Format("%02X ", bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
      else
        strtemp.Format("%c", bt); //将字符送入临时变量strtemp存放
      m_EditReceive += strtemp; //加入接收编辑框对应字符串 
    }
      

  2.   

    variant_inp = m_mscomm.get_Input();   //读缓冲区
    safearryay_inp = variant_inp;   //VARIANT型变量转换为ColeSafeArray型变量
    len = safearryay_inp.GetOneDimSize();  //得到有效数据长度
    // 接受数据
    for(k=0;k<len;k++)  
    {  
    safearryay_inp.GetElement(&k,rxdata+k);   //转换为BYTE型数组
    }  
    Sleep(1);
    for (k=0;k<len;k++)  
    {  
    BYTE bt=*(char*)(rxdata+k); //字符型
    stremp.Format("%02X ",bt); 
    m_EditReceive += stremp;  
    }
    代码没啥问题   调试模式,在出错的时候,点击左下角的调用堆栈,然后从上往下双击,看出问题的那行代码,能看懂的那行就是你的错误所在