文档章节

java将IP地址转换为数字以及逆向转换(位运算和0xFF的使用)第二季

simpower
 simpower
发布于 2014/08/22 08:25
字数 577
阅读 15
收藏 0

原文:

http://www.mkyong.com/java/java-convert-ip-address-to-decimal-number/


来自同一个博客。


IP转为数字(第二种算法。用左移、按位或实现。效率比上一篇的更高。):

[java] view plaincopy在CODE上查看代码片派生到我的代码片

<EMBED id=ZeroClipboardMovie_1 height=18 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. public long ipToLong(String ipAddress) {  

  2.   

  3. long result = 0;  

  4.   

  5. String[] ipAddressInArray = ipAddress.split("\\.");  

  6.   

  7. for (int i = 3; i >= 0; i--) {  

  8.   

  9.     long ip = Long.parseLong(ipAddressInArray[3 - i]);  

  10.   

  11.     //left shifting 24,16,8,0 and bitwise OR  

  12.   

  13.     //1. 192 << 24  

  14.     //1. 168 << 16  

  15.     //1. 1   << 8  

  16.     //1. 2   << 0  

  17.     result |= ip << (i * 8);  

  18.   

  19. }  

  20. return result;  

  21.  }  



数字转为IP,两种算法都差不多:

[java] view plaincopy在CODE上查看代码片派生到我的代码片

<EMBED id=ZeroClipboardMovie_2 height=18 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1.  //ip = 3232235778  

  2.  public String longToIp(long ip) {  

  3. StringBuilder result = new StringBuilder(15);  

  4.   

  5. for (int i = 0; i < 4; i++) {  

  6.   

  7.     result.insert(0,Long.toString(ip & 0xff));  

  8.   

  9.     if (i < 3) {  

  10.         result.insert(0,'.');  

  11.     }  

  12.   

  13.     ip = ip >> 8;  

  14. }  

  15. return result.toString();  

  16.  }  

  17.   

  18.  //ip = 3232235778  

  19.  public String longToIp2(long ip) {  

  20.   

  21. return ((ip >> 24) & 0xFF) + "."   

  22.     + ((ip >> 16) & 0xFF) + "."   

  23.     + ((ip >> 8) & 0xFF) + "."   

  24.     + (ip & 0xFF);  

  25.  }  


完整代码:

[java] view plaincopy在CODE上查看代码片派生到我的代码片

<EMBED id=ZeroClipboardMovie_3 height=18 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">

  1. public class JavaBitwiseExample {  

  2.    

  3.     public static void main(String[] args) {  

  4.    

  5.         JavaBitwiseExample obj = new JavaBitwiseExample();  

  6.    

  7.         System.out.println("iptoLong  : " + obj.ipToLong("192.168.1.2"));  

  8.         System.out.println("iptoLong2 : " + obj.ipToLong2("192.168.1.2"));  

  9.    

  10.         System.out.println("longToIp  : " + obj.longToIp(3232235778L));  

  11.         System.out.println("longToIp2 : " + obj.longToIp2(3232235778L));  

  12.    

  13.     }  

  14.    

  15.     // example : 192.168.1.2  

  16.     public long ipToLong(String ipAddress) {  

  17.    

  18.         // ipAddressInArray[0] = 192  

  19.         String[] ipAddressInArray = ipAddress.split("\\.");  

  20.    

  21.         long result = 0;  

  22.         for (int i = 0; i < ipAddressInArray.length; i++) {  

  23.    

  24.             int power = 3 - i;  

  25.             int ip = Integer.parseInt(ipAddressInArray[i]);  

  26.    

  27.             // 1. 192 * 256^3  

  28.             // 2. 168 * 256^2  

  29.             // 3. 1 * 256^1  

  30.             // 4. 2 * 256^0  

  31.             result += ip * Math.pow(256, power);  

  32.    

  33.         }  

  34.    

  35.         return result;  

  36.    

  37.     }  

  38.    

  39.     public long ipToLong2(String ipAddress) {  

  40.    

  41.         long result = 0;  

  42.    

  43.         String[] ipAddressInArray = ipAddress.split("\\.");  

  44.    

  45.         for (int i = 3; i >= 0; i--) {  

  46.    

  47.             long ip = Long.parseLong(ipAddressInArray[3 - i]);  

  48.    

  49.             // left shifting 24,16,8,0 and bitwise OR  

  50.    

  51.             // 1. 192 << 24  

  52.             // 1. 168 << 16  

  53.             // 1. 1 << 8  

  54.             // 1. 2 << 0  

  55.             result |= ip << (i * 8);  

  56.    

  57.         }  

  58.    

  59.         return result;  

  60.     }  

  61.    

  62.     public String longToIp(long i) {  

  63.    

  64.         return ((i >> 24) & 0xFF) +   

  65.                    "." + ((i >> 16) & 0xFF) +   

  66.                    "." + ((i >> 8) & 0xFF) +   

  67.                    "." + (i & 0xFF);  

  68.    

  69.     }  

  70.    

  71.     public String longToIp2(long ip) {  

  72.         StringBuilder sb = new StringBuilder(15);  

  73.    

  74.         for (int i = 0; i < 4; i++) {  

  75.    

  76.             // 1. 2  

  77.             // 2. 1  

  78.             // 3. 168  

  79.             // 4. 192  

  80.             sb.insert(0, Long.toString(ip & 0xff));  

  81.    

  82.             if (i < 3) {  

  83.                 sb.insert(0'.');  

  84.             }  

  85.    

  86.             // 1. 192.168.1.2  

  87.             // 2. 192.168.1  

  88.             // 3. 192.168  

  89.             // 4. 192  

  90.             ip = ip >> 8;  

  91.    

  92.         }  

  93.    

  94.         return sb.toString();  

  95.     }  

  96. }  


Output:

iptoLong  : 3232235778iptoLong2 : 3232235778longToIp  : 192.168.1.2
longToIp2 : 192.168.1.2



本文转载自:http://blog.csdn.net/hardwin/article/details/17262909

simpower
粉丝 27
博文 645
码字总数 46970
作品 0
海淀
程序员
私信 提问
java byte数据类型详解

Java代码 public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[ i ] & 0xFF); if (hex.length()......

buleberry
2014/04/09
48
0
Java中byte与16进制字符串的互相转换

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和...

毛朱
2013/12/09
4.4K
0
Java中byte与16进制字符串的互相转换

ava中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低...

zhangyujsj
2013/11/26
15.3K
1
Java 中int与byte数组转换详解

1、与运算符的理解(&): 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即 0&0=0;0&1=0;1&0=0;1&1=1; 例子:int x = 6225555...

jiachcheng
2012/12/21
33.6K
0
byte转换int时为何与0xff进行与运算

ava中byte转换int时为何与0xff进行与运算 在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b.length; i++) { String ......

xiahuawuyu
2012/02/26
283
1

没有更多内容

加载失败,请刷新页面

加载更多

如何设计抗住100亿次请求的抢红包系统?(附GitHub代码)

1. 前言 前几天,偶然看到了 《扛住100亿次请求——如何做一个“有把握”的春晚红包系统”》一文,看完以后,感慨良多,收益很多。 正所谓他山之石,可以攻玉,虽然此文发表于2015年,我看到...

Java程序员之家
50分钟前
5
0
动图+源码,演示Java中常用数据结构执行过程及原理

最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList LinkedHashMap中的双向...

Java技术剑
今天
6
0
怎样在ps中制作对话气泡?一招教你轻松解决

PS是在工作中经常使用的平面设计软件,利用ps可以实现很多操作。换天,换发色,添加亮灯等操作都是比较常见的,今天将为大家分享怎样在ps中制作对话气泡的方法,希望能给大家带来帮助。 绘制...

干货趣分享
今天
2
0
EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
今天
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部