C/C++ ip地址与int类型的转换实例详解
C/C++ip地址与int类型的转换实例详解
前言
最近看道一个面试题目,大体意思就是将ip地址,例如“192.168.1.116”转换成int类型,同时还能在转换回去
思路
ip地址转int类型,例如ip为“192.168.1.116”,相当于“.“将ip地址分为了4部分,各部分对应的权值为256^3,256^2,256,1,相成即可
int类型转ip地址,思路类似,除以权值即可,但是有部分字符串的操作
实现代码
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #defineLEN16 typedefunsignedintuint; /** *字符串转整形 */ uintipTint(char*ipstr) { if(ipstr==NULL)return0; char*token; uinti=3,total=0,cur; token=strtok(ipstr,"."); while(token!=NULL){ cur=atoi(token); if(cur>=0&&cur<=255){ total+=cur*pow(256,i); } i--; token=strtok(NULL,"."); } returntotal; } /** *逆置字符串 */ voidswapStr(char*str,intbegin,intend) { inti,j; for(i=begin,j=end;i<=j;i++,j--){ if(str[i]!=str[j]){ str[i]=str[i]^str[j]; str[j]=str[i]^str[j]; str[i]=str[i]^str[j]; } } } /** *整形转ip字符串 */ char*ipTstr(uintipint) { char*new=(char*)malloc(LEN); memset(new,'\0',LEN); new[0]='.'; chartoken[4]; intbt,ed,len,cur; while(ipint){ cur=ipint%256; sprintf(token,"%d",cur); strcat(new,token); ipint/=256; if(ipint)strcat(new,"."); } len=strlen(new); swapStr(new,0,len-1); for(bt=ed=0;ed<len;){ while(ed<len&&new[ed]!='.'){ ed++; } swapStr(new,bt,ed-1); ed+=1; bt=ed; } new[len-1]='\0'; returnnew; } intmain(void) { charipstr[LEN],*new; uintipint; while(scanf("%s",ipstr)!=EOF){ ipint=ipTint(ipstr); printf("%u\n",ipint); new=ipTstr(ipint); printf("%s\n",new); } return0; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!