📄 variantbufconvert.cpp
字号:
// VariantBufConvert.cpp: implementation of the CVariantBufConvert class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "VariantResearch.h"
#include "VariantBufConvert.h"
//#include "Shlwapi.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CVariantBufConvert::CVariantBufConvert()
{
}
CVariantBufConvert::~CVariantBufConvert()
{
}
BOOL CVariantBufConvert::BufToVariant(VARIANT &var, void *Buf, int BufSize)
{
if(BufSize<=0)
return FALSE;
SAFEARRAY * psa=NULL;
SAFEARRAYBOUND pBound;
pBound.lLbound=0; //该维数组的第一个Index
pBound.cElements=BufSize; //数组个数
psa=SafeArrayCreate(VT_UI1,1,&pBound);
memcpy(psa->pvData,Buf,BufSize);
var.vt=VT_ARRAY|VT_UI1 ;
var.parray =psa;
return TRUE;
}
BOOL CVariantBufConvert::VariantToBuf(VARIANT &var, void *Buf, long InputSize,long& ReturnBufSize)
{
if(Buf==NULL) //无Buf
return FALSE;
if(InputSize<=0)
return FALSE;
if(var.vt !=(VT_ARRAY|VT_UI1))//类型不对
return FALSE;
SAFEARRAY * psa=var.parray;
SafeArrayGetUBound(psa,1,&ReturnBufSize);
ReturnBufSize++;
if(InputSize>=ReturnBufSize)
memcpy(Buf,psa->pvData, ReturnBufSize);
else
{
memcpy(Buf,psa->pvData, InputSize);
ReturnBufSize=InputSize;
}
return TRUE;
}
char * CVariantBufConvert::ConvertToBinary(char *tmprs, int nM, char *Hex)
{
for ( int i = 0; i < nM; i++)
{
char tmp[2];
char * stopstring;
tmp[0]=Hex[i*2];
tmp[1]=Hex[i*2+1];
tmprs[i] = ( char ) strtoul( tmp, &stopstring, 16 );
}
return tmprs;
}
/*
BOOL CVariantBufConvert::ConvertToDecstr(CString strHex64, CString &strDesc)
{
// __int64 result;
// int testSuccess=0;
// if(sscanf((char*)(LPCTSTR)(strHex64+" ,$10"),"%I64x ,$%d",&result,&testSuccess)==0)
// return FALSE;
// if(testSuccess!=10)
// return FALSE;
// strDesc.Format("%I64u",result);
// return TRUE;
int len = strHex64.GetLength();
strDesc = "";
CString strResult;
UINT high,low;
//LONGLONG test;
if(len>8)
strDesc = strHex64.Left(len-8);
if(StrToIntEx("0x"+strHex64.Right(8),STIF_SUPPORT_HEX,(int*)&low)&&
StrToIntEx("0x"+strDesc,STIF_SUPPORT_HEX,(int*)&high)) //??
{
LONGLONG result=((LONGLONG)high)<<32|(LONGLONG)low;//??int64
// test=result;
BOOL bMinus=FALSE;
if(result<0)
{
bMinus=TRUE;
result=-result;
}
while(result!=0) //????????
{
strResult+=(int)(result%10)+0x30;
result=result/10;
}
if(bMinus)
strResult+="-";
len=strResult.GetLength();
strDesc.Empty();
while(len--) //????
{
strDesc+=strResult[len];
}
return TRUE;
}
else //????,????
return FALSE;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -