我用MSComm控件编了一个串口通信的程序。
下面是程序的部分代码:
m_ctrlComm.SetSettings("57600,n,8,1");
m_ctrlComm.SetInputMode(1);
m_ctrlComm.SetRThreshold(20);
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
VARIANT data;
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2)
{
  data=m_ctrlComm.GetInput();
  strtemp=data.bstrVal;
  m_strRXData+=strtemp+"\r\n";
}UpdateData(FALSE);当从缓冲区读到的数据保存在VARIANT变量中后,我怎么应该提取出来,在用十六进制的方式显示出来了?
我在网上下的串口通信的软件,当选择用16进制显示时,显示的数据是7E 45 00 FF FF 00 00 04 00 2A 00 03 00 33 AD 1E 7E ,这个才是我想要的,但是我应该怎么写了?(上面的数据是无线传感器网络节点的信号强度数据)
哪位高手帮帮忙,急!!!

解决方案 »

  1.   

    可以转化成十六进制为ASCII码
      

  2.   

    VARIANT 是ATL的结构体。你直接用这样可以个串串!
      

  3.   


            vector<UCHAR> m_Data;         VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[1000]; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;

    if(m_strmscomm.GetCommEvent()==2)     //事件值为2表示接收缓冲区内有字符
    {
    variant_inp=m_strmscomm.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);      //字符型                 m_Data.push_back(bt);//将接收到的数据存储到容器中
    }
    }
      

  4.   

    唉,发出来就成这个样子了,更正下:
    1.定义的容器最好为成员变量;
    2.最后一条语句不是注释,放在for循环里的:m_Data.push_back(bt);
    如果想调用的话你遍历下这个容器就可以了
      

  5.   

    楼上运行过了没?我运行会出现内存不能为read的情况,是怎么回事了?
      

  6.   

    VARIANT data;
    COleSafeArray safearray;
    LONG len,k;
    BYTE rxdata[3089];    //8位无符号的整数
    CString strtemp; 

    if(m_ctrlComm.GetCommEvent()==2)
    {
    data=m_ctrlComm.GetInput();
    //strtemp=data.bstrVal; safearray=(COleSafeArray)data;
    //data.
    //data.bstrVal
    len=safearray.GetOneDimSize();
    for(k=0; k<len;k++) 
    {
    safearray.GetElement(&k,rxdata+k); //转换为BYTE型数组
    BYTE bt=*(char*)(rxdata+k); //字符型
    strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
    m_strRXData+=strtemp;
    }
    应用程序出现错误!