整数型的ipv4地址为无符号32位整数,注意这点即可
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void str2int(char *str, unsigned int *ip)
{
int cnt = 0;
char num_buf[5] = {0};
int buf_cnt = 0;
unsigned int ip_value = 0;
int bit = 3;
while(1){
if(str[cnt] >= '0' && str[cnt] <= '9' && str[cnt] != '\0'){
num_buf[buf_cnt++] = str[cnt];
}
else{
ip_value += strtol(num_buf,NULL,0)*(1<<(bit*8));
memset(num_buf,0,5);
buf_cnt = 0;
bit--;
}
if(str[cnt] == '\0'){
break;
}
else{
cnt++;
}
}
*ip = ip_value;
}
void int2str(unsigned int ip, char *str)
{
char part[10] = {0};
for(int i = 0; i < 4;i++){
sprintf(part,"%d.",ip / (1<<((3-i)*8)));
strcat(str,part);
memset(part,0,10);
ip = ip%(1<<((3-i)*8));
}
str[strlen(str)-1] = '\0';
}
int main(void)
{
unsigned int ip_addr;
char buf[20] = {0};
char ip_str[20] = {0};
unsigned int tmp;
// strcpy(ip_str,"10.0.3.193");
//ip_addr = 167969729;
while((scanf("%s",ip_str)) != EOF){
scanf("%d",&ip_addr);
str2int(ip_str, &tmp);
printf("%u\n",tmp);
int2str(ip_addr,buf);
printf("%s\n",buf);
memset(buf,0,20);
memset(ip_str,0,20);
}
return 0;
}


京公网安备 11010502036488号