题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

**主要考验32位无符号数的操作

#include <stdio.h>

#include <string.h>

//10进制转2进制函数,a表示10进制数,b数组存储转换后的2进制数组,c表示数组最后一位下表+1

void trans10To2(unsigned int a,int *b,int c,int d){

int i=0;
for(i=c-1;i>=c-d;i--){
    b[i]=a%2;
    a=a/2;
}

}

//2进制转10进制函数,a为2进制数组,count返回转换后的10进制数

unsigned int trasn2To10(int *a,int b,int c){

unsigned int count=0;
int value=1;
int i=b;
for(i=i-1;i>=b-c;i--){
    count=count+value*a[i];
    value=value*2;
}
return count;

}

int main(){

int ip_1,ip_2,ip_3,ip_4=0;
unsigned int num=0;
unsigned int ip_num=0;
int num_ip1,num_ip2,num_ip3,num_ip4=0;
//输入IP
scanf("%d.%d.%d.%d",&ip_1,&ip_2,&ip_3,&ip_4);
scanf("%d",&num);
int ip[32]={0};
//IP转10进制
trans10To2(ip_1,ip,8,8);
trans10To2(ip_2,ip,16,8);
trans10To2(ip_3,ip,24,8);
trans10To2(ip_4,ip,32,8);
ip_num=trasn2To10(ip,32,32);
//10进制转IP
int num_ip[32]={0};
trans10To2(num, num_ip, 32, 32);
num_ip1=trasn2To10(num_ip, 8,8);
num_ip2=trasn2To10(num_ip, 16,8);
num_ip3=trasn2To10(num_ip, 24,8);
num_ip4=trasn2To10(num_ip, 32,8);
//输出
printf("%u\n",ip_num);
printf("%d.%d.%d.%d",num_ip1,num_ip2,num_ip3,num_ip4);
return 0;

}

全部评论

相关推荐

点赞 评论 收藏
分享
02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务