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

📄 pgpendianconversion.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: pgpEndianConversion.c,v 1.5 2002/08/06 20:10:34 dallen Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"	/* or pgpConfig.h in the CDK */

#include "pgpEndianConversion.h"

	PGPUInt16
PGPEndianToUInt16(
	PGPEndianType	type,
	const PGPByte *	raw )
{
	PGPUInt16	result;
	
	if ( type == kPGPBigEndian )
	{
		result	= raw[ 0 ];
		result	<<= 8;
		result	|= raw[ 1 ];
	}
	else
	{
		result	= raw[ 1 ];
		result	<<= 8;
		result	|= raw[ 0 ];
	}
	
	return( result );
}


	PGPUInt32
PGPEndianToUInt32(
	PGPEndianType	type,
	const PGPByte *	raw )
{
	PGPUInt32	result;
	
	if ( type == kPGPBigEndian )
	{
		result	= raw[ 0 ];		result	<<= 8;
		result	|= raw[ 1 ];	result	<<= 8;
		result	|= raw[ 2 ];	result	<<= 8;
		result	|= raw[ 3 ];
	}
	else
	{
		result	= raw[ 3 ];		result	<<= 8;
		result	|= raw[ 2 ];	result	<<= 8;
		result	|= raw[ 1 ];	result	<<= 8;
		result	|= raw[ 0 ];
	}
	
	return( result );
}

#if PGP_HAVE64
	PGPUInt64
PGPEndianToUInt64(
	PGPEndianType	type,
	const PGPByte *	raw )
{
	PGPUInt64	result;
	
	if ( type == kPGPBigEndian )
	{
		result	= raw[ 0 ];		result	<<= 8;
		result	|= raw[ 1 ];	result	<<= 8;
		result	|= raw[ 2 ];	result	<<= 8;
		result	|= raw[ 3 ];	result	<<= 8;
		result	|= raw[ 4 ];	result	<<= 8;
		result	|= raw[ 5 ];	result	<<= 8;
		result	|= raw[ 6 ];	result	<<= 8;
		result	|= raw[ 7 ];
	}
	else
	{
		result	= raw[ 7 ];		result	<<= 8;
		result	|= raw[ 6 ];	result	<<= 8;
		result	|= raw[ 5 ];	result	<<= 8;
		result	|= raw[ 4 ];	result	<<= 8;
		result	|= raw[ 3 ];	result	<<= 8;
		result	|= raw[ 2 ];	result	<<= 8;
		result	|= raw[ 1 ];	result	<<= 8;
		result	|= raw[ 0 ];
	}
	
	return( result );
}
#endif

	void
PGPUInt16ToEndian(
	PGPUInt16		num,
	PGPEndianType	toType,
	PGPByte			out[ sizeof( PGPUInt16 ) ] )
{
	if ( toType == kPGPBigEndian )
	{
		out[0] = num >> 8;
		out[1] = num & 0xFF;		
	}
	else
	{
		out[ 0 ]	= num & 0xFF;
		num			>>= 8;
		out[ 1 ]	= num & 0xFF;
	}
}


	void
PGPUInt32ToEndian(
	PGPUInt32		num,
	PGPEndianType	toType,
	PGPByte			out[ sizeof( PGPUInt32 ) ] )
{
	if ( toType == kPGPBigEndian )
	{
		out[0] = num >> 24;
		out[1] = (num >> 16) & 0xFF;		
		out[2] = (num >> 8) & 0xFF;		
		out[3] = num & 0xFF;		
	}
	else
	{
		out[ 0 ]	= num & 0xFF;
		num			>>= 8;
		out[ 1 ]	= num & 0xFF;
		num			>>= 8;
		out[ 2 ]	= num & 0xFF;
		num			>>= 8;
		out[ 3 ]	= num & 0xFF;
	}
}


#if PGP_HAVE64
	void
PGPUInt64ToEndian(
	PGPUInt64		num,
	PGPEndianType	toType,
	PGPByte			out[ sizeof( PGPUInt64 ) ] )
{
	if ( toType == kPGPBigEndian )
	{
		out[0] = (PGPByte) (num >> 56);
		out[1] = (PGPByte) ((num >> 48) & 0xFF);		
		out[2] = (PGPByte) ((num >> 40) & 0xFF);		
		out[3] = (PGPByte) ((num >> 32) & 0xFF);		
		out[4] = (PGPByte) ((num >> 24) & 0xFF);		
		out[5] = (PGPByte) ((num >> 16) & 0xFF);		
		out[6] = (PGPByte) ((num >> 8) & 0xFF);		
		out[7] = (PGPByte) (num & 0xFF);		
	}
	else
	{
		out[0] = (PGPByte) (num & 0xFF);	num >>= 8;
		out[1] = (PGPByte) (num & 0xFF);	num >>= 8;
		out[2] = (PGPByte) (num & 0xFF);	num >>= 8;
		out[3] = (PGPByte) (num & 0xFF);	num >>= 8;
		out[4] = (PGPByte) (num & 0xFF);	num >>= 8;
		out[5] = (PGPByte) (num & 0xFF);	num >>= 8;
		out[6] = (PGPByte) (num & 0xFF);	num >>= 8;
		out[7] = (PGPByte) (num & 0xFF);
	}
}
#endif

	void
PGPUInt16ToStorage(
	PGPUInt16	num,
	PGPByte		out[ sizeof( PGPUInt16 ) ] )
{
	PGPUInt16ToEndian( num, kPGPLittleEndian, out );
}

	void
PGPUInt32ToStorage(
	PGPUInt32	num,
	PGPByte		out[ sizeof( PGPUInt32 ) ] )
{
	PGPUInt32ToEndian( num, kPGPLittleEndian, out );
}

#if PGP_HAVE64
	void
PGPUInt64ToStorage(
	PGPUInt64	num,
	PGPByte		out[ sizeof( PGPUInt64 ) ] )
{
	PGPUInt64ToEndian( num, kPGPLittleEndian, out );
}
#endif

	PGPUInt16
PGPStorageToUInt16( const PGPByte *	in )
{
	return( PGPEndianToUInt16( kPGPLittleEndian, in ) );
}

	PGPUInt32
PGPStorageToUInt32( const PGPByte *	in )
{
	return( PGPEndianToUInt32( kPGPLittleEndian, in ) );
}

#if PGP_HAVE64
	PGPUInt64
PGPStorageToUInt64( const PGPByte *	in )
{
	return( PGPEndianToUInt64( kPGPLittleEndian, in ) );
}
#endif


/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

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