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

拉玛努贾姆:

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

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

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

dasblinkenlight:

会有什么htons()情况下做,如果主机字节顺序也是大端?

没什么-确实如此。首先介绍的目的htons()是让您编写不关心系统字节顺序的代码。定义功能的头文件是尾数起作用的唯一位置。

这是一个htons用其参数表达式周围的括号代替的实现

#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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查系统为Little Endian或Big Endian

BOOST_ENDIAN_BIG_BYTE和BOOST_ENDIAN_BIG_WORD有什么区别?

前往:无法在powerpc64(big-endian)上运行

为什么Big Endian以小字节结尾?

Little Endian与Big Endian架构

“ postsuper -d ALL”在文件系统上做什么?

在Intel上使用ByteBuffers时,我应何时选择Little Endian与Big Endian?

为什么python的结构认为little-endian和big-endian暗示了不同的长度?

在TransactionTooLargeException上做什么

将Little Endian转换为Big Endian

为什么struct中的第一个打包数据是little endian,而其余的是big endian?

PowerPC和SPARC(均为big-endian)上的data.table错误行为

Unicode,Unicode Big Endian还是UTF-8?有什么区别?哪种格式更好?

为什么在C ++ big endian中使用bitshift转换为int16无效?

为什么 memcpy() 将整数目标作为 Big Endian 处理但不用于 char 目标?

Yosemite系统上的“ / usr”中的“ llvm-gcc-4.2”在做什么?

brk()系统调用做什么?

tty子系统是做什么用的?

为什么在 C# 中将 ushort 端口号从 htons 转换为 ntohs 会给出不同的结果?

DispatchWallTime在iOS上做什么?

nanotime在MacOS上做什么?

.Net Core中的Big-Endian处理

怎么把UUID转换成big endian?

.bin 文件的 Python Big-Endian 转换

4 字节 big-endian 到 int

'tar --overwrite'实际上做什么(或不做什么)?

Big Endian和Little Endian支持字节排序

golang是否提供htonl / htons?

用htons确定字节序