#define htons(x) ___htons(x)
#define ___htons(x) __cpu_to_be16(x)
#define __force __attribute__((force))
typedef unsigned short __u16;
typedef __u16 __bitwise __be16;
#define __cpu_to_be16(x) ((__force __be16)__swab16((x)))//little_endian
#define __cpu_to_be16(x) ((__force __be16)(__u16)(x))//big_endian
#define __swab16(x) \
(__builtin_constant_p((__u16)(x)) ? \
___constant_swab16(x) : \
__fswab16(x))
/*
__builtin_constant_p(x)
如果x的值在编译时能确定,那么该函数返回值为1.
*/
static inline __attribute_const__ __u16 __fswab16(__u16 val)
{
#ifdef __arch_swab16
return __arch_swab16(val);
#else
return ___constant_swab16(val);
#endif
}
#define ___constant_swab16(x) ((__u16)( \
(((__u16)(x) & (__u16)0x00ffU) << 8) | \
(((__u16)(x) & (__u16)0xff00U) >> 8)))
htonl与此类似,它最终调用下面的宏定义
#define ___constant_swab32(x) ((__u32)( \
(((__u32)(x) & (__u32)0x000000ffUL) << 24) | \
(((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \
(((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \
(((__u32)(x) & (__u32)0xff000000UL) >> 24)))
htons htonl
最新推荐文章于 2024-08-01 08:54:41 发布