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

📄 hxinfcod.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	if (nBitLenActual==nBitLen)    {		bRetVal  = this->DecodeObj(Buffer, nBitLen, pObj);    }	delete [] Buffer;    return bRetVal;}/////////////////////////////////////////////////////////////////////BOOL  CHXInfoDecoder::HexDecodeObj(const char* szHex, IHXStreamableObj* pObj){	if (szHex)    {		return this->HexDecodeObj(szHex,strlen(szHex),pObj);    }	return(FALSE);}/////////////////////////////////////////////////////////////////////BOOL  CHXInfoDecoder::HexDecodeObj(const char* szHex, UINT32 nHexLen, IHXStreamableObj* pObj){	UINT32 nBitLen  = nHexLen>>1; // unhexed length is 1/2 of hex'd length	UCHAR* Buffer=new UCHAR[nBitLen];	HX_ASSERT(Buffer!=NULL);	if (Buffer==NULL)	return(FALSE);    UINT32 nBitLenActual = CHXInfoDecoder::SetFromHex(szHex, Buffer, nHexLen);	BOOL bRetVal = FALSE;	if (nBitLenActual==nBitLen)    {		bRetVal  = this->DecodeObj(Buffer,nBitLen,pObj);    }	delete [] Buffer;    return bRetVal;}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadObj(IHXStreamableObj* pObj) {	UINT32 nLen=this->GetOffset();	if (pObj->ReadObjFromBits(this)==HXR_OK)		return this->GetOffset()-nLen;#if 0			// reading object	this->Seek(nLen);#endif	return(0);}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadUCHAR(UCHAR& nValue){    UCHAR temp;    memcpy(&temp, m_Buffer+m_nOffset, sizeof(temp)); /* Flawfinder: ignore */    nValue = temp;	m_nOffset += sizeof(temp);    return sizeof(temp);}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadUINT16(UINT16& nValue){    UINT16 temp16;    memcpy(&temp16, m_Buffer+m_nOffset, sizeof(temp16)); /* Flawfinder: ignore */    nValue = WToHost(temp16);	m_nOffset += sizeof(temp16);    return sizeof(temp16);}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadUINT32(UINT32& nValue){    UINT32 temp32;    memcpy(&temp32, m_Buffer+m_nOffset, sizeof(temp32)); /* Flawfinder: ignore */    nValue = DwToHost(temp32);	m_nOffset += sizeof(temp32);    return sizeof(temp32);}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadString(CHXString& strValue){    UINT32 FieldLen = *(m_Buffer+m_nOffset++);    char* pBuffer = strValue.GetBuffer((int)FieldLen);    memcpy(pBuffer, m_Buffer+m_nOffset, (int)FieldLen); /* Flawfinder: ignore */    pBuffer[FieldLen] = '\0';    strValue.ReleaseBuffer();	m_nOffset += FieldLen;    return FieldLen+1;}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadAndAllocCString(char*& pszValue){    UINT32 FieldLen = *(m_Buffer+m_nOffset++);    pszValue = new char[FieldLen+1];    memcpy(pszValue, m_Buffer+m_nOffset, (int)FieldLen); /* Flawfinder: ignore */    pszValue[FieldLen] = '\0';	m_nOffset += FieldLen;    return FieldLen+1;}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadLargeString(CHXString& strValue){    UINT16 FieldLen = 0;    UINT32 nSize = ReadUINT16(FieldLen);    char* pBuffer = strValue.GetBuffer(FieldLen);    memcpy(pBuffer, m_Buffer+m_nOffset, FieldLen); /* Flawfinder: ignore */    pBuffer[FieldLen] = '\0';    strValue.ReleaseBuffer();	m_nOffset += FieldLen;    return nSize+FieldLen;}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadAndAllocLargeCString(char*& pszValue){    UINT16 FieldLen = 0;    UINT32 nSize = ReadUINT16(FieldLen);    pszValue = new char[FieldLen+1];    memcpy(pszValue, m_Buffer+m_nOffset, FieldLen); /* Flawfinder: ignore */    pszValue[FieldLen] = '\0';	m_nOffset += FieldLen;    return nSize+FieldLen;}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadBuffer(char* szBuffer, UINT32 nSize){    memcpy(szBuffer, m_Buffer+m_nOffset, (int)nSize); /* Flawfinder: ignore */	m_nOffset += nSize;    return nSize;}#if 0/////////////////////////////////////////////////////////////////////STDMETHODIMP_(UINT32) CHXInfoDecoder::ReadUTCTime(UTCTimeRep& TimeRep){	UINT32	time, nSize;	nSize = ReadUINT32(time);	TimeRep.SetUTCTime(time);	return(nSize);}#endif/////////////////////////////////////////////////////////////////////STDMETHODIMP CHXInfoDecoder::Seek(UINT32 nPos){	if (nPos<=m_nDecodedLen)    {		m_nOffset = nPos;    }	return(HXR_OK);}/////////////////////////////////////////////////////////////////////STDMETHODIMP CHXInfoDecoder::SkipForward(UINT32 nAmount){	m_nOffset += nAmount;	if (m_nOffset>m_nDecodedLen)    {		m_nOffset = m_nDecodedLen;    }	return(HXR_OK);}/////////////////////////////////////////////////////////////////////STDMETHODIMP_(BOOL) CHXInfoDecoder::IsEndOfData(){	if (m_nDecodedLen<Perplex_ALIGNMENT)	{		return(TRUE);	}	if (m_nOffset>(m_nDecodedLen-Perplex_ALIGNMENT))		return(TRUE);	else		return(FALSE);}/////////////////////////////////////////////////////////////////////////////////	Function:////		FromHexNibble()////	Purpose://////	Parameters:////		char hexChar//		Character representing a hex encoding of a nibble.////	Return:////		UCHAR//		Actual value of the nibble encoded by hexChar.//UCHAR CHXInfoDecoder::FromHexNibble(char hexChar){	UCHAR value = 0;	if (hexChar >= '0' && hexChar <= '9')	{		value = hexChar - '0';	}	else if (hexChar >= 'A' && hexChar <= 'F')	{		value = hexChar - 'A' + 10;	}	else if (hexChar >= 'a' && hexChar <= 'f')	{		value = hexChar - 'a' + 10;	}#ifdef _DEBUG	else	{		// Bad hex character!		HX_ASSERT(FALSE);	}#endif	return value;}/////////////////////////////////////////////////////////////////////////////////	Function:////		HXClientLicense::SetFromHex()////	Purpose:////		Sets items of the license key from a hexidecimal encoding of the//		license key bits.////	Parameters:////		const char* hex//		Pointer to a buffer that contains a hexidecimal encoding of the//		license key.////		UCHAR* Bits//		Pointer to a buffer that will be filled on output with a bitwise//		decoding of the license key.////		UINT32 nSize//		Size of the hex string on input////	Return:////		int//		Size in bytes of decoded size!////	Note://// 		Hex representations of the License Key consist of the// 		representation of the bits in human readable form in a// 		HEX encoding. This basically uses a pointer to a memory// 		buffer of charcters encoded as hex representing the bits.// 		Valid characters are 0-9,A-F. Buffers out will be upper// 		case letters, buffers in will be converted to upper case.//// 		These char's are hex encoding. They are never DBCS, the only//		valid characters are 0-9,A-F//UINT32 CHXInfoDecoder::SetFromHex(const char* hex, UCHAR* Bits, UINT32 nSize){	UINT32	ndxBits;	UINT32	ndxHex = 0;	UCHAR			nibble1;	UCHAR			nibble2;	UCHAR			byte;	for (ndxBits = 0; ndxHex < nSize; ndxBits++)	{		nibble1 = FromHexNibble(hex[ndxHex]);		nibble1 = nibble1 << 4;		ndxHex++;		nibble2 = FromHexNibble(hex[ndxHex]);		byte = nibble1 | nibble2;		ndxHex++;		Bits[ndxBits] = byte;	}	return ndxBits;}/////////////////////////////////////////////////////////////////////////////////	Function:////		ToHexNibble()////	Purpose:////		Converts a nibble into the appropriate character for Hex encoding.////	Parameters:////		UCHAR hexValue//		Value of the nibble.////	Return:////		char//		Character representing the hex encoding of the nibble.//char CHXInfoEncoder::ToHexNibble(UCHAR hexValue){	char hexChar = '0';	if (hexValue <= 0x9)	{		hexChar = '0' + hexValue;	}	else if (hexValue >= 0xA && hexValue <= 0xF)	{		hexChar = 'A' + (hexValue - 10);	}#ifdef _DEBUG	else	{		// Bad hex character!		HX_ASSERT(FALSE);	}#endif	return hexChar;}/////////////////////////////////////////////////////////////////////////////////	Function:////		DumpToHex()////	Purpose:////		Formats the license key in human readable hexadecimal encoding.////	Parameters:////		char* hex//		Pointer to buffer to be filled with hexadecimal encoding of//		license key////	Return:////		None.//void CHXInfoEncoder::DumpToHex(char* hex, UCHAR* Bits, UINT32	nSize){	UINT32	ndxBits;	UINT32	ndxHex = 0;	UCHAR			nibble1;	UCHAR			nibble2;	UCHAR			byte;	for (ndxBits = 0; ndxBits < nSize; ndxBits++)	{		byte = Bits[ndxBits];		nibble1 = (byte & 0xF0) >> 4;		nibble2 = (byte & 0x0F);		hex[ndxHex] = ToHexNibble(nibble1);		ndxHex++;		hex[ndxHex] = ToHexNibble(nibble2);		ndxHex++;	}	hex[ndxHex] = '\0';}/////////////////////////////////////////////////////////////////////////////////	Function:////		MapFromPerplex()////	Purpose:////		Converts appropriate characters for Perplex encoding into a ULONG32.//#ifdef _WIN16extern char* zPerplexChars;#else// A copy of this is kept in in pnmisc\pub\win\pnmisc16.h.  If you change // this (which is very unlikely), then be sure to change it there.  static const char zPerplexChars[] =						{							'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',							'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',							'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',							'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',							'E'						};static const char zDePerplexMap[] = {	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,	0,36,37,38,39,40,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,	25,26,27,28,29,30,31,32,33,34,35,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};#endif /* _WIN16 */UCHAR CHXInfoDecoder::MapFromPerplex(char Perplex){    return zDePerplexMap[Perplex];}/////////////////////////////////////////////////////////////////////////////////	Function:////		MapToPerplex()////	Purpose:////		Converts a digit ordinal to the Perplex digit...//char CHXInfoEncoder::MapToPerplex(UCHAR Perplex){                                                  	#ifdef _DEBUG	#ifndef _WIN16	// On win16, zPerplexChars is a char *, rather than an array, so this	// doesn't work.	int size_zPerplexChars  = sizeof(zPerplexChars); 	int size_zPerplexChars0 = sizeof(zPerplexChars[0]);	HX_ASSERT(Perplex < size_zPerplexChars/size_zPerplexChars0);	#endif	#endif	return zPerplexChars[Perplex];}/////////////////////////////////////////////////////////////////////////////////	Function:////		FromPerplex()////	Purpose:////		Converts appropriate characters for Perplex encoding into a ULONG32.//ULONG32 CHXInfoDecoder::FromPerplex(const char* Perplex){	ULONG32 value = 0;	ULONG32 PerplexBase = 1;	for (int n = 0; n < Perplex_PER_ULONG32; n++)	{		value += MapFromPerplex(Perplex[n]) * PerplexBase;		PerplexBase *= Perplex_BASE;	}	// Convert to local byte order!	value = DwToHost(value);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -