这个文件主要是实现字节序转换, 即把一个多字节数据从本机转化为网络字节序。
主要实现了三个函数:
static uint16_t (*hton16) (uint16_t);
static uint32_t (*hton32) (uint32_t);
static uint64_t (*hton64) (uint64_t);
明显就是分别转化16位,32位和64位整型数据了。这是三个函数指针,具体绑定到那个函数,是动态绑定的, 这里的实现手法有点意思,也许可以称为偷梁换柱吧:)
他实现方法是这样:
static inline uint16_t
__byte_order_init16 (uint16_t i)
{
uint32_t num = 1;
if (((char *)(&num))[0] == 1) {
hton16 = ;
hton32 = __swap32;
hton64 = __swap64;
} else {
hton16 = __noswap16;
hton32 = __noswap32;
hton64 = __noswap64;
}
return hton16 (i);
}
static uint16_t (*hton16) (uint16_t) = __byte_order_init16;
只有第一次执行hton16时才进行绑定,直接给转到__swapXX或者_noswapXX上去了,很有意思吧。
阅读(608) | 评论(1) | 转发(0) |