我用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 ,这个才是我想要的,但是我应该怎么写了?(上面的数据是无线传感器网络节点的信号强度数据)
哪位高手帮帮忙,急!!!
下面是程序的部分代码:
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 ,这个才是我想要的,但是我应该怎么写了?(上面的数据是无线传感器网络节点的信号强度数据)
哪位高手帮帮忙,急!!!
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);//将接收到的数据存储到容器中
}
}
1.定义的容器最好为成员变量;
2.最后一条语句不是注释,放在for循环里的:m_Data.push_back(bt);
如果想调用的话你遍历下这个容器就可以了
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;
}
应用程序出现错误!