使用Java代码将IP地址转换为int类型的方法
基本知识点
IP——>整数:
把IP地址转化为字节数组
通过左移位(<<)、与(&)、或(|)这些操作转为int
整数——>IP:
将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP。
将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP。
将整数值进行右移位操作(>>>),右移8位,再进行与操作符(&)0xFF,得到的数字即为第三段IP。
将整数值进行与操作符(&)0xFF,得到的数字即为第四段IP。
思路
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;
}