zoukankan      html  css  js  c++  java
  • 关于htons和htonl

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

    下面就让我们看看他们:

    htons

    #include <arpa/inet.h>
    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 <arpa/inet.h>
    uint32_t htonl(uint32_t hostlong);
    hostlong:主机字节顺序表达的32位数。
    注释:
      本 函数将一个32位数从主机字节顺序转换成网络字节顺序。
    返回值:
          htonl()返回一个网络字节顺序的值。
    参见:
        htons()ntohl()ntohs().


    在Linux系统下:
    #include <arpa/inet.h>
    uint32_t htonl(uint32_t hostlong);
    相关函数: uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort); 网际协议在处理这些多字节整数时,使用大端字节序。 在主机本身就使用大端字节序时,这些函数通常被定义为空宏。
  • 相关阅读:
    HDU1720 A+B Coming
    HDU1390 ZOJ1383 Binary Numbers
    HDU1390 ZOJ1383 Binary Numbers
    HDU2504 又见GCD
    HDU2504 又见GCD
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1020 ZOJ2478 Encoding
    HDU1020 ZOJ2478 Encoding
    HDU2097 Sky数
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3014177.html
Copyright © 2011-2022 走看看