htonl() vs __builtin_bswap32()
c, endianness, gcc, linux
Solution
Just look at source code : (example from glib 2.18)
#undef htonl
#undef ntohl
uint32_t
htonl (x)
uint32_t x;
{
#if BYTE_ORDER == BIG_ENDIAN
return x;
#elif BYTE_ORDER == LITTLE_ENDIAN
return __bswap_32 (x);
#else
# error "What kind of system is this?"
#endif
}
weak_alias (htonl, ntohl)
And : `#define __bswap_32(x) ((unsigned int)__builtin_bswap32(x))`
Source here : http://fossies.org/dox/glibc-2.18/htonl_8c_source.html
As you can see, `htonl` only call `__builtin_bswap32` on little-endian machines.
Problem
`__builtin_bswap32()` is used to reverse bytes (it's used for littel/big endian issues (from gcc)). `htonl()` is used to reverse bytes too (conversion from host to network). I checked both functions and they returns the same result. Are there some one who can confirm that both functions do the same thing? (standard refences are appreciated)