先看实例
代码如下
class ip
{
private static long iptolong(string strip)
//将 形式的ip地址转换成进制整数这里没有进行任何错误处理
{
int j=;
int i=;
long [] ip=new long[];
int position=stripindexof("");
int position=stripindexof(""position+);
int position=stripindexof(""position+);
ip[]=longparselong(stripsubstring(position));
ip[]=longparselong(stripsubstring(position+position));
ip[]=longparselong(stripsubstring(position+position));
ip[]=longparselong(stripsubstring(position+));
return (ip[]<<)+(ip[]<<)+(ip[]<<)+ip[]; //ip***+ip**+ip*+ip
}
private static string longtoip(long longip)
//将进制整数形式转换成形式的ip地址在命令提示符下输入ping l
{
stringbuffer sb=new stringbuffer("");
sbappend(stringvalueof(longip>>>));//直接右移位
sbappend("");
sbappend(stringvalueof((longip&xffffff)>>>)); //将高位置然后右移位
sbappend("");
sbappend(stringvalueof((longip&xffff)>>>));
sbappend("");
sbappend(stringvalueof(longip&xff));
sbappend("");
return sbtostring();
}
public static void main(string[] args)
{
systemoutprintln("ip地址的各种表现形式rn");
systemoutprint("位二进制形式");
systemoutprintln(longtobinarystring(l));
systemoutprint("十进制形式");
systemoutprintln(iptolong(""));
systemoutprint("普通形式");
systemoutprintln(longtoip(l));
}
}
运行结果
ip地址的各种表现形式
位二进制形式
十进制形式
普通形式
输出完成 (耗时 秒) 正常终止
我们再一步步分开来分析一下
知识点一个二进制数按位左移n位就是把该数的值乘以的n次方
二进制除二即右移一位
IP地址转换为整数
原理IP地址每段可以看成是位无符号整数即把每段拆分成一个二进制形式组合起来然后把这个二进制数转变成
一个无符号为整数
举例一个ip地址为
每段数字 相对应的二进制数
组合起来即为 转换为进制就是即该IP地址转换后的数字就是它了
代码如下
public class Ip {
public static void main(String[] args) {
Systemoutprint(ipint(""));
}
public static long ipint(String ip) {
String[] items = ipsplit("");
return LongvalueOf(items[]) <<
| LongvalueOf(items[]) <<
| LongvalueOf(items[]) <<
| LongvalueOf(items[]);
}
}
整数转换为IP地址
原理把这个整数转换成一个位二进制数从左到右每位进行一下分割得到段位的二进制数把这些二进制数转换成整数然后加上””就是这个ip地址了
举例
二进制表示形式为
分割成四段分别转换为整数后加上“”就得到了
代码如下
public class Ip {
public static void main(String[] args) {
Systemoutprint(intip());
}
public static String intip(long ipInt) {
StringBuilder sb = new StringBuilder();
sbappend(ipInt & xFF)append("");
sbappend((ipInt >> ) & xFF)append("");
sbappend((ipInt >> ) & xFF)append("");
sbappend((ipInt >> ) & xFF);
return sbtoString();
}
}