__builtin_bswap32()
用于反转字节(用于处理littel/big endian问题(来自gcc))。htonl()
也用于反转字节(从主机到网络的转换)。
我检查了两个函数,它们返回相同的结果。
是否有人可以确认这两个功能都做相同的事情? (赞赏标准引用)
最佳答案
只需看一下源代码即可:(来自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)
和:
#define __bswap_32(x) ((unsigned int)__builtin_bswap32(x))
来源:http://fossies.org/dox/glibc-2.18/htonl_8c_source.html
如您所见,
htonl
仅在little-endian机器上调用__builtin_bswap32
。