__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

07-24 14:08