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中去,该怎么做啊?
{
// 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中去,该怎么做啊?
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];
}