#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
//形如"192.168.2.1"转换到数组和主机字节序
/*
typedef uint32_t in_addr_t;
struct in_addr{
in_addr_t s_addr;
};
ip地址合法性
a.4个数字不能大于255
b.第一个数字不能为0
c.最后一个数字不能为0、255
***************************************************
@ :字符串ip转换成网络字节序ip,ip合法性检查 a
@in :const char *__cp
@out :struct in_addr *__inp
@return :success 1 fail 0
int inet_aton (const char *__cp, struct in_addr *__inp);
***************************************************
@ :字符串ip转换成网络字节序ip,ip合法性检查 a
@in :const char *__cp
@out :
@return :in_addr_t 出错返回INADDR_NONE
in_addr_t inet_addr (const char *__cp);
//主机字节序ip地址如192.168.2.1转换字符串ip
***************************************************
@ :将网络序二进制IPv4地址转换成点分十进制数串,ip合法性检查 a
@in :struct in_addr __in
@out :
@return :
char *inet_ntoa (struct in_addr __in);
*/
char * str_ip = "192.168.2.1";
//char * str_ip = "1.255.255.255";
main()
{
int ret;
uint32_t ip_v4;
/*****************************************/
struct in_addr ip_num;
ret = inet_aton(str_ip, &ip_num);
if(ret == 1)
{
ip_v4 = ntohl(ip_num.s_addr);//网络字节序转化为主机字节序
printf("inet_aton success ip %x\n",ip_v4);
printf("%u.%u.%u.%u\n",*((unsigned char*)&ip_v4+3),*((unsigned char*)&ip_v4+2),\
*((unsigned char*)&ip_v4+1),*((unsigned char*)&ip_v4));
}
else if(ret == 0)
{
printf("inet_aton fail\n");
}
/*****************************************/
ip_v4 = inet_addr(str_ip);
if( ip_v4 != INADDR_NONE ) //INADDR_NONE 255.255.255.255
{
ip_v4 = ntohl(ip_v4);
printf("inet_addr success ip %x\n",ip_v4);
printf("%u.%u.%u.%u\n",*((unsigned char*)&ip_v4+3),*((unsigned char*)&ip_v4+2),\
*((unsigned char*)&ip_v4+1),*((unsigned char*)&ip_v4));
}
else if(ret == 0)
{
printf("inet_addr fail\n");
}
struct in_addr addr1,addr2;
uint32_t addr1_num,addr2_num;
addr1_num = inet_addr("192.168.0.0");
addr2_num = inet_addr("8.8.8.8");
memcpy(&addr1,&addr1_num,4);
memcpy(&addr2,&addr2_num,4);
//这里注意
printf("inet_ntoa %s:%s\n",inet_ntoa(addr1),inet_ntoa(addr2));
printf("inet_ntoa %s\n",inet_ntoa(addr1));
printf("inet_ntoa %s\n",inet_ntoa(addr2));
return 0;
}
运行结果
inet_aton success ip c0a80201
192.168.2.1
inet_addr success ip c0a80201
192.168.2.1
inet_ntoa 192.168.0.0:192.168.0.0
inet_ntoa 192.168.0.0
inet_ntoa 8.8.8.8