关于htons和htonl

关于htons和htonl我开始的时候认为 htons 和 htonl 可以只用 htonl 代替但是后来发现这个是错误 会导致服务器端和客户端连接不上 下面就让我们看看他们 htons include uint16 thtons uint16 thostshort htons 的功能 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 将一个无符号短整型数值转换为网络字节序 即大端模式 big

我开始的时候认为htons和htonl可以只用htonl代替但是后来发现这个是错误,会导致服务器端和客户端连接不上。

下面就让我们看看他们:

htons

#include

 

uint16_t htons(uint16_t hostshort); 
htons的功能:
                        将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)  参数u_short hostshort: 16位无符号整数 返回值:
               TCP / IP网络字节顺序.
htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在内存的低字节处。
举个例子:
                假定你的port是  0x1234,  在网络字节序里 这个port放到内存中就应该显示成  addr addr+1  0x12 0x34  而在x86电脑上,0x1234放到内存中实际是:  addr addr+1  0x34 0x12 htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。











htonl()

  简述:  将主机的无符号长整形数转换成网络字节顺序。 

 #include

  

uint32_t htonl(uint32_t hostlong);  
hostlong:主机字节顺序表达的32位数。  
注释:
    本 函数将一个32位数从主机字节顺序转换成网络字节顺序。  
返回值: 
       htonl()返回一个网络字节顺序的值。  
参见: 
      htons(),  ntohl(),  ntohs().  

在Linux系统下:  
#include

  

uint32_t htonl(uint32_t hostlong);  
相关函数:  uint16_t htons(uint16_t hostshort);  uint32_t ntohl(uint32_t netlong);  uint16_t ntohs(uint16_t netshort);  网际协议在处理这些多字节整数时,使用大端字节序。  在主机本身就使用大端字节序时,这些函数通常被定义为空宏。

















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221756.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:21
下一篇 2026年3月17日 下午5:21


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号