htons()将主机字节顺序转换为networking字节顺序。
networking字节顺序是Big-Endian,主机字节顺序可以是Little-Endian或Big-Endian。
在Little Endian系统上, htons()会将一个多字节variables的顺序转换为Big-Endian。 如果主机字节顺序也是Big-Endian的话,会怎么办呢?
在Linux程序中embeddedPython
Winsock2的fd 0(stdin)上的select()失败
录制发送给扬声器的声音
GCC_ARM的path(mbed_settings.py)
C#在linux中执行一个terminal命令
当不确定的行为可以被认为是公认的并被接受的时候?
何时使用HANDLE_EINTR或HANDLE_EAGAIN?
将文件移动到不同的目录
recvfrom()不返回收到的字节数
如果主机字节顺序也是big endian, htons()做什么?
没有 – 完全字面上。 首先介绍htons()的目的是让你编写不关心系统字节顺序的代码。 头文件是定义函数的唯一的地方,在这里endianness发挥作用。
下面是一个用括号括起来的参数表达式的实现:
#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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。