You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
incubator_embeded/w5500/utility.c

96 lines
1.8 KiB

#include "utility.h"
/**
*@brief 16位字符高8位低8位转换
*@param i:要转化的数据
*@return 转换后的数据
*/
uint16 swaps(uint16 i)
{
uint16 ret=0;
ret = (i & 0xFF) << 8;
ret |= ((i >> 8)& 0xFF);
return ret;
}
/**
*@brief 32位字符高低位变换
*@param i:要转化的数据
*@return 转换后的数据
*/
uint32 swapl(uint32 l)
{
uint32 ret=0;
ret = (l & 0xFF) << 24;
ret |= ((l >> 8) & 0xFF) << 16;
ret |= ((l >> 16) & 0xFF) << 8;
ret |= ((l >> 24) & 0xFF);
return ret;
}
/**
*@brief 将一个 主机模式的unsigned short型数据转换到大端模式的TCP/IP 网络字节格式的数据.
*@param 要转换的数据
*@return 大端模式的数据
*/
uint16 htons(
uint16 hostshort /**< A 16-bit number in host byte order. */
)
{
#if ( SYSTEM_ENDIAN == _ENDIAN_LITTLE_ )
return swaps(hostshort);
#else
return hostshort;
#endif
}
/**
*@brief 将一个 主机模式的unsigned long型数据转换到大端模式的TCP/IP 网络字节格式的数据.
*@param 要转换的数据
*@return 大端模式的数据
*/
unsigned long htonl(
unsigned long hostlong /**< hostshort - A 32-bit number in host byte order. */
)
{
#if ( SYSTEM_ENDIAN == _ENDIAN_LITTLE_ )
return swapl(hostlong);
#else
return hostlong;
#endif
}
/**
*@brief 将一个大端模式的TCP/IP 网络字节格式的数据转换到主机模式的unsigned short型数据
*@param 要转换的数据
*@return unsigned short模式的数据
*/
unsigned long ntohs(
unsigned short netshort /**< netshort - network odering 16bit value */
)
{
#if ( SYSTEM_ENDIAN == _ENDIAN_LITTLE_ )
return htons(netshort);
#else
return netshort;
#endif
}
/**
*@brief 将一个大端模式的TCP/IP 网络字节格式的数据转换到主机模式的unsigned long型数据
*@param 要转换的数据
*@return unsigned long模式的数据
*/
unsigned long ntohl(unsigned long netlong)
{
#if ( SYSTEM_ENDIAN == _ENDIAN_LITTLE_ )
return htonl(netlong);
#else
return netlong;
#endif
}