朱有鹏 IP地址格式转换函数实践(4)
使用man inet_addr可以看使用说明
(1)inet_addr(只兼容IPv4)、inet_ntoa、inet_aton
(2)inet_pton(兼容IPv4、IPv6)、inet_ntop(兼容IPv4、IPv6)
inet_addr:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define IPADDR "192.168.1.102" //点分十进制
//十六进制: 0x66 01 a8 c0 (32位二进制)
//十进制: 102 1 168 192 (点分十进制)
//网络字节序,其实就是大端模式
int main(void)
{
in_addr_t addr = 0;
addr = inet_addr(IPADDR);// 将点分十进制字符串格式的IP地址转换32位二进制
printf("addr = 0x%x.\n", addr);//0x6601a8c0
return 0;
}
inet_pton
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define IPADDR "192.168.1.102" //点分十进制
int main(void)
{
//使用inet_pton来转换(可以兼容IPv6)
int ret = 0;
struct in_addr addr = {0};
//参数:AF_INET:IPv4,IPADDR:源(点分十进制的字符串),dst:转换后的地址
ret = inet_pton(AF_INET, IPADDR, &addr);
if (ret != 1)
{
printf("inet_pton errori\n");
return -1;
}
printf("addr = 0x%x.\n", addr.s_addr);
return 0;
}
inet_ntop
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void)
{
struct in_addr addr = {0};
char buf[50] = {0};
addr.s_addr = 0x6601a8c0;//32位二进制
inet_ntop(AF_INET, &addr, buf, sizeof(buf));
printf("ip addr = %s.\n", buf);
return 0;
}