/********************************************************
*                                                      
*  文件名   ：   Convert.c  
*  版权说明 ：   北京瑞安时代科技有限责任公司 
*  版本号   ：   1.0
*  创建时间 ：   2008.07.29
*  作者     ：   车载及协议部
*  功能描述 ：   通用类型转换函数                                                                           
*  修改记录 ：  
*
********************************************************/ 

#include "Convert.h"

/*
*  功能描述：  用于将2字节数据变为UINT16， BIG endian
*  参数说明：  pInput, 为输入
*  返回值：    变换后的UINT16值;0 入口参数为空
*/
UINT16 ShortFromChar(const UINT8 *pInput)
{
    UINT16 Tempshort = 0u;
	if (NULL == pInput)
	{
		; /*入口参数为空*/
	} 
	else
	{
		Tempshort = (UINT16)(*pInput);
		Tempshort = (UINT16)((Tempshort << 8u) + *(pInput + 1u));
	}

    return Tempshort;
}

/*
*  功能描述：  用于将4字节数据变为UINT32， BIG endian
*  参数说明：  pInput, 为输入
*  返回值：    变换后的UINT32值;0u 入口参数为空
*/
UINT32 LongFromChar(const UINT8 *pInput)
{
    UINT32 Templong = 0u;
	if (NULL  == pInput)
	{
		; /*入口参数为空*/
	} 
	else
	{
		Templong = (UINT32)(*pInput);
		Templong = (UINT32)((Templong << 8u) + *(pInput + 1u));
		Templong = (UINT32)((Templong << 8u) + *(pInput + 2u));
		Templong = (UINT32)((Templong << 8u) + *(pInput + 3u));
	}

    return Templong;
}

/*
*  功能描述：  将2个字节长的整型变为字节表示  BIG endian
*  参数说明：  Input, 为输入
*              pOutput,为输出
*  返回值：  
*/
void ShortToChar ( UINT16 Input, UINT8 *pOutput)
{
	if (NULL == pOutput)
	{
		; /*入口参数为空*/
	} 
	else
	{
		*pOutput = (UINT8)((Input >> 8u) & 0xffu);
		*(pOutput + 1u) = (UINT8)(Input & 0xffu);
	}

}

/*
*  功能描述：  将4个字节长的整型变为字节表示  BIG endian
*  参数说明：  Input, 为输入
*              pOutput,为输出
*  返回值：  
*/
void LongToChar(UINT32 Input, UINT8 *pOutput)
{
	if (NULL == pOutput)
	{
		; /*入口参数为空*/
	} 
	else
	{
		*pOutput = (UINT8)((Input >> 24u) & 0xffu);
		*(pOutput + 1u) = (UINT8)((Input >> 16u) & 0xffu);
		*(pOutput + 2u) = (UINT8)((Input >> 8u) & 0xffu);
		*(pOutput + 3u) = (UINT8)(Input & 0xffu);
	}

}




/*
*  功能描述：  用于将UINT8变为UINT16， LITTLE endian
*  参数说明：  pInput, 为输入
*  返回值：    变换后的UINT16值；0u 入口参数为空
*/
UINT16 ShortFromCharLE(const UINT8 *pInput)
{
    UINT16 Tempshort = 0u;
	if (NULL  == pInput)
	{
		; /*入口参数为空*/
	} 
	else
	{
		Tempshort = *(pInput + 1);
		Tempshort = (UINT16)((Tempshort << 8) + *(pInput));
	}
    return Tempshort;
}

/*
*  功能描述：  用于将UINT8变为UINT32， LITTLE endian
*  参数说明：  pInput, 为输入
*  返回值：    变换后的UINT32值;0u 入口参数为空
*/
UINT32 LongFromCharLE(const UINT8 *pInput)
{
    UINT32 Templong = 0u;
	if (NULL == pInput)
	{
		; /*入口参数为空*/
	} 
	else
	{
		Templong = (UINT32)(*(pInput + 3u));
		Templong = (UINT32)((Templong << 8u) + *(pInput + 2u));
		Templong = (UINT32)((Templong << 8u) + *(pInput + 1u));
		Templong = (UINT32)((Templong << 8u) + *(pInput));
	}

    return Templong;
}

/*
*  功能描述： 将2个字节的整型变为字节表示  LITTLE endian
*  参数说明： Input, 为输入
*             pOutput,为输出
*  返回值： 
*/
void ShortToCharLE ( UINT16 Input, UINT8 *pOutput)
{
	if (NULL == pOutput)
	{
		; /*无操作*/
	} 
	else
	{
		*(pOutput + 1u) = (UINT8)((Input >> 8u) & 0xffu);
		*pOutput = (UINT8)(Input & 0xffu);
	}

}

/*
*  功能描述： 将4个字节的整型变为字节表示  LITTLE endian
*  参数说明： Input, 为输入
*             pOutput,为输出
*  返回值： 
*/
void LongToCharLE(UINT32 Input, UINT8 *pOutput)
{
	if (NULL == pOutput)
	{
		; /*无操作*/
	} 
	else
	{
		*(pOutput + 3u) = (UINT8)((Input >> 24u) & 0xffu);
		*(pOutput + 2u) = (UINT8)((Input >> 16u) & 0xffu);
		*(pOutput + 1u) = (UINT8)((Input >> 8u) & 0xffu);
		*pOutput = (UINT8)(Input & 0xffu);
	}

}
