如何在Linux内核中将__u32转换为__be32

时间:2014-02-21 11:11:18

标签: c linux-kernel htonl

我有一个变量

__be32 x;

我有一个功能

__u32 foo(void){
      __u32 a;
      return a;
}

我需要在变量x中存储foo的返回值。

x=htonl(foo());

这是对的吗? 我很遗憾ntohl()htonl()的返回类型是什么。它们彼此相反吗?

要检查输出,我需要重新编译内核,我不想让我的系统出现任何错误。所以我在这里问。

1 个答案:

答案 0 :(得分:6)

您可以使用kernel.h中定义的宏:

http://www.bruceblinn.com/linuxinfo/ByteOrder.html

  

以下宏在转换后返回值。   注意:linux / kernel.h头文件应该是头文件   包含在使用这些宏的源文件中,但它是   而不是实际定义宏的头文件。

#include <linux/kernel.h>
__u16   le16_to_cpu(const __le16);
__u32   le32_to_cpu(const __le32);
__u64   le64_to_cpu(const __le64);

__le16  cpu_to_le16(const __u16);
__le32  cpu_to_le32(const __u32);
__le64  cpu_to_le64(const __u64);

__u16   be16_to_cpu(const __be16);
__u32   be32_to_cpu(const __be32);
__u64   be64_to_cpu(const __be64);

__be16  cpu_to_be16(const __u16);
__be32  cpu_to_be32(const __u32);
__be64  cpu_to_be64(const __u64);