⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 variantbufconvert.cpp

📁 C++语言开发的受机短信相关的源程序
💻 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 + -