网络编程 - 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

浙公网安备 33010602011771号