网络编程 - ntohl(x) , ntohs(x) , htonl(x) , htons(x)

Sokcet 大端序和小端序

如果需要了解,可以点击这里

网络字节序

网络字节顺序是TCP/IP 中规定好的一种数据表示格式,是确定的!它与具体的 CPU 类型、OS无关,从而可以保证在不同主机之间传输时能够正确解释,网络字节顺序采用 big endian 排序顺序。

本地字节顺序的固定就会根据具体的CPU和OS来决定了,network byte order 转化为 host byte order 时, 注意是那种转化host byte order,例如

CPU 操作系统 to host byte order
Alpha 全部 Little endian
HP-PA NT Little endian
Intelx86 全部 Little endian
HP-PA UNIX Big endian

Objective-C 写Socket时,会用这四个endian函数。

#include <sys/_endian.h>

1. 这四个函数定义

convert values between host and network byte order.

2. 字母含义

例如:htons(x) 和 htonl(x)

  • h : Host
  • to: To
  • n : Network
  • s : Short(16Bytes)
  • l : Long(32Bytes)

3. 代码演示

    uint32_t host_long  = 55;
    uint16_t host_short = 20;
    
    uint32_t network_long  = htonl(host_long);
    uint16_t network_short = htons(host_short);

    NSLog(@"%u %u", network_short, network_long);
    NSLog(@"%d %d",ntohs(network_short),ntohl(network_long));

打印结果:

    network bytes order 5120 922746880
    host bytes order    20 55
posted @ 2016-05-18 21:31  lvable  阅读(434)  评论(0)    收藏  举报