从串口接收了一串数据存放的var(VARIANT),想将其转换为CByteArray,用了两种方法都没行得通。大家知道的帮帮忙?解决思路
从串口接收了一串数据存放的var(VARIANT),想将其转换为CByteArray,用了两种方法都没行得通。大家知道的帮帮忙?
方法一
方法二
这是为什么呢?.......
------解决方案--------------------
if(var.vt == (VT_ARRAY|VT_UI1))
{
BYTE *pByte = NULL;
::SafeArrayAccessData(var.parray,(void **)&pByte);
memcpy(pBuff,pByte,sizeof(HEADER_USERADM));
::SafeArrayUnaccessData(var.parray);
}
------解决方案--------------------
COleSafeArray SafeArray;
SafeArray=var;
int count=SafeArray.GetOneDimSize(); //得到有效数据长度
for(int i=0;i<count;i++)
{
Byte rxdata;
SafeArray.GetElement(&i,rxdata);//转换为BYTE型数据
byArr.Add(rxdata) ;
}
- C/C++ code
CMscomm m_msComm; //
- C/C++ code
void CMyDlg::OnCommMscomm() { // TODO: 在此处添加消息处理程序代码 if ( m_msComm.get_CommEvent() == 2 ) { int nLen = 0; nLen = m_msComm.get_InBufferCount(); CByteArray byRcvd; VariantToByteArry( m_msComm.get_Input(), byRcvd, nLen); } }
方法一
- C/C++ code
/ VARIANT转换为BYTE数组 void CMyDlg::VariantToByteArry( VARIANT& var, CByteArray& byArr, int nLen ) { var.vt = VT_SAFEARRAY; COleSafeArray SafeArray( var ); //构造SafeArray时对象出现异常 SafeArray.GetByteArray( byArr ); int count = byArr.GetCount(); }
方法二
- C/C++ code
// VARIANT转换为BYTE数组 void CMyDlg::VariantToByteArry( VARIANT& var, CByteArray& byArr, int nLen ) { BYTE * pBy = ( BYTE * ) var.parray->pvData; for ( int i = 0; i < nLen; i ++ ) { byArr.Add( *( pBy + i ) ); //读数据出现异常 } }
这是为什么呢?.......
------解决方案--------------------
if(var.vt == (VT_ARRAY|VT_UI1))
{
BYTE *pByte = NULL;
::SafeArrayAccessData(var.parray,(void **)&pByte);
memcpy(pBuff,pByte,sizeof(HEADER_USERADM));
::SafeArrayUnaccessData(var.parray);
}
------解决方案--------------------
COleSafeArray SafeArray;
SafeArray=var;
int count=SafeArray.GetOneDimSize(); //得到有效数据长度
for(int i=0;i<count;i++)
{
Byte rxdata;
SafeArray.GetElement(&i,rxdata);//转换为BYTE型数据
byArr.Add(rxdata) ;
}