gpt4 book ai didi

c - htons() 在 Big-Endian 系统上做什么?

转载 作者:IT王子 更新时间:2023-10-29 01:08:20 28 4
gpt4 key购买 nike

htons() 将主机字节顺序转换为网络字节顺序。

网络字节顺序是 Big-Endian,主机字节顺序可以是 Little-Endian 或 Big-Endian。

在 Little Endian 系统上,htons() 会将多字节变量的顺序转换为 Big-Endian。如果主机字节顺序也是 Big-Endian,htons() 会做什么?

最佳答案

What will htons() do in case if the host byte order is also big endian?

没有 - 字面意思。首先引入htons() 的目的是让您编写不关心系统字节顺序的代码。定义函数的头文件是字节顺序发挥作用的唯一地方。

这里是 one implementationhtons 替换为其参数表达式周围的括号:

#if BYTE_ORDER == BIG_ENDIAN

#define HTONS(n) (n)
#define NTOHS(n) (n)
#define HTONL(n) (n)
#define NTOHL(n) (n)

#else

#define HTONS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))
#define NTOHS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))

#define HTONL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
((((unsigned long)(n) & 0xFF00)) << 8) | \
((((unsigned long)(n) & 0xFF0000)) >> 8) | \
((((unsigned long)(n) & 0xFF000000)) >> 24))

#define NTOHL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
((((unsigned long)(n) & 0xFF00)) << 8) | \
((((unsigned long)(n) & 0xFF0000)) >> 8) | \
((((unsigned long)(n) & 0xFF000000)) >> 24))
#endif

#define htons(n) HTONS(n)
#define ntohs(n) NTOHS(n)

#define htonl(n) HTONL(n)
#define ntohl(n) NTOHL(n)

关于c - htons() 在 Big-Endian 系统上做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36262070/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com