BIG_ENDIAN и LITTLE_ENDIAN
Мозги чёйта замёрзли походу. Какие два из четырёх применимы к з80?
#ifndef UIP_HTONS
# if UIP_BYTE_ORDER == UIP_BIG_ENDIAN
# define UIP_HTONS(n) (n)
# define UIP_HTONL(n) (n)
# else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
# define UIP_HTONS(n) (uint16_t)((((uint16_t) (n)) << 8) | (((uint16_t) (n)) >> 8))
# define UIP_HTONL(n) (((uint32_t)UIP_HTONS(n) << 16) | UIP_HTONS((uint32_t)(n) >> 16))
# endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
#else
#error "UIP_HTONS already defined!"
#endif /* UIP_HTONS
u_short swaps(u_int i)
{
u_short ret=0;
ret = (i & 0xFF) << 8;
ret |= ((i >> 8)& 0xFF);
return ret;
}
u_long swapl(u_long l)
{
u_long ret=0;
ret = (l & 0xFF) << 24;
ret |= ((l >> 8) & 0xFF) << 16;
ret |= ((l >> 16) & 0xFF) << 8;
ret |= ((l >> 24) & 0xFF);
return ret;
}
/**
@brief htons function converts a unsigned short from host to TCP/IP network byte order (which is big-endian).
@return the value in TCP/IP network byte order
*/
unsigned short htons(
unsigned short hostshort /**< A 16-bit number in host byte order. */
)
{
#if ( SYSTEM_ENDIAN == _ENDIAN_LITTLE_ )
return swaps(hostshort);
#else
return hostshort;
#endif
}
/**
@brief htonl function converts a unsigned long from host to TCP/IP network byte order (which is big-endian).
@return the value in TCP/IP network byte order
*/
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
}
deathsoft wrote: LITTLE_ENDIAN
deathsoft wrote:Читать до полного просветления Порядок байтов
а я оное пословно переводил. английский в школе прогуливал обычноlittle-endian, дословно: «остроконечный»
deathsoft wrote:Ну какбэ литтл - это маленький, а биг - большой, что какбэ не двусмысленно намекает какой байт лежит первым.
Users browsing this forum: No registered users and 0 guests