地址转换函数
在 socket 编程中,对于地址转换函数,BSD包含
inet_addr()
,inet_aton()
和inet_ntoa()
三个函数用于二进制地址格式与点分十进制之间的相互转换,但是仅仅适用于 IPv4;inet_ntop()
和inet_pton()
具有相似的功能,并且同时支持 IPv4 和 IPv6;字母p代表presentation,字母n代表numeric。
inet_addr
头文件:
#include <arpa/inet.h>
功能:该函数用于将 点分十进制 IP 地址转换成 网络字节序 IP 地址。
原型:
1
in_addr_t inet_addr(const char *cp);
返回值:如果正确执行,将返回一个无符号长整数型数;如果传入的字符串不是一个合法的IP地址,将返回
INADDR_NONE
。
inet_aton
头文件:
#include <arpa/inet.h>
功能:该函数用于将 点分十进制 IP 地址转换成 网络字节序 IP 地址。
原型:
1
int inet_aton(const char *string, struct in_addr *addr);
返回值:如果正确执行,函数的返回值非零,如果输入地址不正确则会返回零。
inet_ntoa
头文件:
#include <arpa/inet.h>
功能:该函数用于 网络字节序 IP 转化 点分十进制 IP 地址。
原型:
1
char *inet_ntoa (struct in_addr);
返回值:如果正确执行,将返回一个字符指针;否则,返回
NULL
。
inet_pton
头文件:
#include <arpa/inet.h>
功能:该函数用于将 点分十进制 IP 地址转换成 网络字节序 IP 地址。
原型:
1
int inet_pton(int domain, const char *restrict str, void *restrict addr);
返回值:如果正确执行,返回1;如果参数格式无效,返回0;如果出错,返回-1。
inet_ntop
头文件:
#include <arpa/inet.h>
功能:该函数用于 网络字节序 IP 转化 点分十进制 IP 地址。
原型:
1
const char *inet_ntop(int domain, const void *restrict addr, char *restrict str, socklen_t size);
返回值:如果正确执行,返回地址字符串指针;否则,返回NULL。
例子
例子1
1 |
|
输出结果
1 | 网络字节序 IP : 0x100007f |
例子2
1 |
|
输入结果
1 | 网络字节序 IP : 0x100007f |
端口转换函数
htons
头文件:
#include <netinet/in.h>
功能:将主机字节顺序转换为网络字节顺序;
host to network long
。原型:
1
uint32_t htonl(uint32_t hostlong);
返回值:转换后的值。
htons
头文件:
#include <netinet/in.h>
功能:将主机字节顺序转换为网络字节顺序;
host to network short
。原型:返回转化后的值。
1
uint16_t htons(uint16_t hostshort);
返回值:转换后的值。
ntohl
头文件:
#include <netinet/in.h>
功能:将网络字节顺序转换为主机字节顺序;
network to host long
。原型:
1
uint32_t ntohl(uint32_t netlong);
返回值:转换后的值。
ntohs
头文件:
#include <netinet/in.h>
功能:将网络字节顺序转换为主机字节顺序;
network to host short
。原型:
1
uint16_t ntohs(uint16_t netshort);
返回值:转换后的值。