在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。 这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数: 之所以需要这些函数是因为计算机数据表示存在两种字节顺序:NBO与HBO。 网络字节顺序NBO(Network Byte Order): 主机字节顺序(HBO,Host Byte Order): 由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同power pc那样的顺序 。在PC开发中有ntohl和htonl函数可以用来进行网络字节和主机字节的转换。 #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); 在windows系统下:htonl(),htons(), ntohl(), ntohs(), inet_addr()使用说明
ntohs() 简述: ntohl() 简述: htons() htonl() 简述: inet_ntoa() inet_aton() inet_pton() 指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC atoi() array to integer将字符串转换为整形数 首先,假设你已经有了一个sockaddr_in结构体ina,你有一个IP地址"132.241.5.10" 要储存在其中,你就要用到函数inet_addr(),将IP地址从 点数格式转换成无符号长整型。 *********************************************************************************************************************************** 测试代码如下#include inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。第一句printf的结果只能说明在printf里面的可变参数的求值是从右到左的,仅此而已。 |
|
来自: LibraryOfKevin > 《网络编程》