linux内核 大小端,linux内核字节序转换宏

用户态我们常使用htonl、ntohl等进行字节序转换。内核中也定义了相同的宏,定义在include/linux/byteorder.h中。

#define ___htonl(x) __cpu_to_be32(x)

#define ___htons(x) __cpu_to_be16(x)

#define ___ntohl(x) __be32_to_cpu(x)

#define ___ntohs(x) __be16_to_cpu(x)

#define htonl(x) ___htonl(x)

#define ntohl(x) ___ntohl(x)

#define htons(x) ___htons(x)

#define ntohs(x) ___ntohs(x)

这里的be代表big edition(大端),le代表little edtion(小端)。

在这个文件还定义了另外一种比较直观的宏

#define cpu_to_le64 __cpu_to_le64                    // 小端转换宏

#define le64_to_cpu __le64_to_cpu

#define cpu_to_le32 __cpu_to_le32

#define le32_to_cpu __le32_to_cpu

#define cpu_to_le16 __cpu_to_le16

#define le16_to_cpu __le16_to_cpu

#define cpu_to_be64 __cpu_to_be64                // 大端转换宏

#define be64_to_cpu __be64_to_cpu

#define cpu_to_be32 __cpu_to_be32

#define be32_to_cpu __be32_to_cpu

#define cpu_to_be16 __cpu_to_be16

#define be16_to_cpu __be16_to_cpu

文件中还可以看到一些以p结尾的宏,例如be32_to_cpup,以指针作为参数,转换结果作为返回值。

还有一些以s结尾的宏,例如be32_to_cpus,同样以指针作为参数,转换结果写入参数指向的内存,覆盖了原有数据。

知其然,知其所以然。

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值