Java – Convert IP address to Decimal Number
In this tutorial, we show you how to convert an IP address to its decimal equivalent in Java, and vice versa. For examples :
255.255.255.255 <-> 4294967295
192.168.1.2 <-> 3232235778
1. IP Address to Decimal
We show you two ways to convert an IP address to a decimal number
- Normal power of 256
- Bit shifting
1.1 First Example – Power of 256
The IP address is “base 256”, to convert 192.168.1.2 to decimal (base 10) the formula is:
192 x (256)^3 + 168 x (256)^2 + 1 x (256)^1 + 2 (256)^0 = ?
3221225472 + 11010048 + 256 + 2 = 3232235778
public long ipToLong(String ipAddress) {
String[] ipAddressInArray = ipAddress.split("\\.");
long result = 0;
for (int i = 0; i < ipAddressInArray.length; i++) {
int power = 3 - i;
int ip = Integer.parseInt(ipAddressInArray[i]);
result += ip * Math.pow(256, power);
}
return result;
}
Some developers prefer to use modular like this
result += (Integer.parseInt(ipAddressInArray[i]) % 256 * Math.pow(256, power));
1.2 Second Example - Bit shifting
Review the binary bit shifting graph below :
public long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
//left shifting 24,16,8,0 and bitwise OR
//1. 192 << 24
//1. 168 << 16
//1. 1 << 8
//1. 2 << 0
result |= ip << (i * 8);
}
return result;
}
192 00000000 00000000 00000000 11000000
-----------------------------------------------
192 << 24 11000000 00000000 00000000 00000000
Result 00000000 00000000 00000000 00000000
Result |= 11000000 00000000 00000000 00000000
168 00000000 00000000 00000000 10101000
-----------------------------------------------
168 << 16 00000000 10101000 00000000 00000000
Result 11000000 00000000 00000000 00000000
Result |= 11000000 10101000 00000000 00000000
1 00000000 00000000 00000000 00000001
-----------------------------------------------
1 << 8 00000000 00000000 00000001 00000000
Result 11000000 10101000 00000000 00000000
Result |= 11000000 10101000 00000001 00000000
2 00000000 00000000 00000000 00000010
-----------------------------------------------
2 << 0 00000000 00000000 00000000 00000010
Result 11000000 10101000 00000001 00000000
Result |= 11000000 10101000 00000001 00000010
Convert the final binary code to decimal, by hand calculation :) ~
Result 11000000 10101000 00000001 00000010
index 0 - 31, start from right.
31(1),30(1),29,28,27,26,25,24,23(1),22,21(1),20,19(1),18,17,16,15,14,13,12,11,10,9,8(1),7,6,5,4,3,2,1(1),0
Decimal 1x2^31 + 1x2^30 + 1x2^23 + 1x2^21 + 1x2^19 + 1x2^8 + 1x2^1
2147483648 + 1073741824 + 8388608 + 2097152 + 524288 + 256 + 2
3232235778
2. Decimal to IP Address
We show you two bit shifting and "0xff" masking examples to convert a decimal number back to IP address. The bit shifting is very hard to explain in words, it's better review the binary flows below :
2.1 First Example.
//ip = 3232235778
public String longToIp(long ip) {
StringBuilder result = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
result.insert(0,Long.toString(ip & 0xff));
if (i < 3) {
sb.insert(0,'.');
}
ip = ip >> 8;
}
return result.toString();
}
Review the bit shifting flows :
3232235778 11000000 10101000 00000001 00000010
<<Loop 1>>
-----------------------------------------------------------
ip 11000000 10101000 00000001 00000010
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 00000010 = 2
Result Append .2
-------------------------> 8
ip >> 8 00000000 11000000 10101000 00000001 {off 00000010}
<<Loop 2>>
-----------------------------------------------------------
ip 00000000 11000000 10101000 00000001
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 00000001 = 1
Result Append 1.2
----------------> 8
ip >> 8 00000000 00000000 11000000 10101000 {off 00000001}
<<Loop 3>>
-----------------------------------------------------------
ip 00000000 00000000 11000000 10101000
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 10101000 = 168
Result Append 168.1.2
-------> 8
ip >> 8 00000000 00000000 00000000 11000000 {off 10101000}
<<Loop 4>>
-----------------------------------------------------------
ip 00000000 00000000 00000000 11000000
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 11000000 = 192
Result Append 192.168.1.2
-----------> 8
ip >> 8 00000000 00000000 00000000 00000000 {off 11000000}
2.2 Second Example.
//ip = 3232235778
public String longToIp(long ip) {
return ((ip >> 24) & 0xFF) + "."
+ ((ip >> 16) & 0xFF) + "."
+ ((ip >> 8) & 0xFF) + "."
+ (ip & 0xFF);
}
3232235778 11000000 10101000 00000001 00000010
1. (ip >> 24) & 0xFF
-----------------------------------------------------------
ip 11000000 10101000 00000001 00000010
-------------------------------------> 24
ip >> 24 00000000 00000000 00000000 11000000 {off 10101000 00000001 00000010}
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 11000000 = 192
2. (ip >> 16) & 0xFF
-----------------------------------------------------------
ip 11000000 10101000 00000001 00000010
-------------------------------------> 16
ip >> 16 00000000 00000000 11000000 10101000 {off 00000001 00000010}
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 10101000 = 168
3. (ip >> 8) & 0xFF
-----------------------------------------------------------
ip 11000000 10101000 00000001 00000010
--------------------------------------> 8
ip >> 24 00000000 11000000 10101000 00000001 {off 00000010}
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 00000001 = 1
4. ip & 0xFF
-----------------------------------------------------------
ip 11000000 10101000 00000001 00000010
& 0xff 00000000 00000000 00000000 11111111
Result 00000000 00000000 00000000 00000010 = 2
3. Java Source Code
Full Java example to demonstrate above scenario :
package com.mkyong.core;
public class JavaBitwiseExample {
public static void main(String[] args) {
JavaBitwiseExample obj = new JavaBitwiseExample();
System.out.println("iptoLong : " + obj.ipToLong("192.168.1.2"));
System.out.println("iptoLong2 : " + obj.ipToLong2("192.168.1.2"));
System.out.println("longToIp : " + obj.longToIp(3232235778L));
System.out.println("longToIp2 : " + obj.longToIp2(3232235778L));
}
// example : 192.168.1.2
public long ipToLong(String ipAddress) {
// ipAddressInArray[0] = 192
String[] ipAddressInArray = ipAddress.split("\\.");
long result = 0;
for (int i = 0; i < ipAddressInArray.length; i++) {
int power = 3 - i;
int ip = Integer.parseInt(ipAddressInArray[i]);
// 1. 192 * 256^3
// 2. 168 * 256^2
// 3. 1 * 256^1
// 4. 2 * 256^0
result += ip * Math.pow(256, power);
}
return result;
}
public long ipToLong2(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
// left shifting 24,16,8,0 and bitwise OR
// 1. 192 << 24
// 1. 168 << 16
// 1. 1 << 8
// 1. 2 << 0
result |= ip << (i * 8);
}
return result;
}
public String longToIp(long i) {
return ((i >> 24) & 0xFF) +
"." + ((i >> 16) & 0xFF) +
"." + ((i >> 8) & 0xFF) +
"." + (i & 0xFF);
}
public String longToIp2(long ip) {
StringBuilder sb = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
// 1. 2
// 2. 1
// 3. 168
// 4. 192
sb.insert(0, Long.toString(ip & 0xff));
if (i < 3) {
sb.insert(0, '.');
}
// 1. 192.168.1.2
// 2. 192.168.1
// 3. 192.168
// 4. 192
ip = ip >> 8;
}
return sb.toString();
}
/*
private static void printPrettyBinary(String binary) {
String s1 = String.format("%32s", binary).replace(' ', '0');
System.out.format("%8s %8s %8s %8s %n",
s1.substring(0, 8),
s1.substring(8, 16),
s1.substring(16, 24),
s1.substring(24, 32));
}
*/
}
Output
iptoLong : 3232235778
iptoLong2 : 3232235778
longToIp : 192.168.1.2
longToIp2 : 192.168.1.2
地址:http://www.mkyong.com/java/java-convert-ip-address-to-decimal-number/
Java – Convert IP address to Decimal Number的更多相关文章
- [转]How to convert IP address to country name
本文转自:http://www.codeproject.com/Articles/28363/How-to-convert-IP-address-to-country-name Download ...
- lwip IP address handling 关于 IP 地址的 操作 API接口
lwip 2.0.3 IP address handling /** * @file * IP address API (common IPv4 and IPv6) */ 1.u32_t ipadd ...
- Convert IPv6 Address to IP numbers (C#)
URL: http://lite.ip2location.com/ Use the code below to convert the IP address of your web visitors ...
- Java Regex match IP address
Reference: [1] https://www.mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-ex ...
- poj 2105 IP Address(水题)
一.Description Suppose you are reading byte streams from any device, representing IP addresses. Your ...
- IP Address 分类: POJ 2015-06-12 19:34 12人阅读 评论(0) 收藏
IP Address Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 19125 Accepted: 11053 Desc ...
- 华东师大OJ:IP Address【IP地址转换】
/*===================================== IP Address Time Limit:1000MS Memory Limit:30000KB Total Subm ...
- poj2105 IP Address(简单题)
题目链接:id=2105">http://poj.org/problem?id=2105 ----------------------------------------------- ...
- IP address/地址 检查
1.Determine if a string is a valid IP address in C Beej's Guide to Network Programming 2.9.14. inet_ ...
随机推荐
- 14.怎样自学Struts2之Struts2类型转换[视频]
14.怎样自学Struts2之Struts2类型转换[视频] 之前写了一篇"打算做一个视频教程探讨怎样自学计算机相关的技术",优酷上传不了.仅仅好传到百度云上: http://pa ...
- adb shell settings 控制安卓系统设置(转)
Android4.2的源码android-17\com\android\commands目录下较之前的版本多了一个settings命令,查看其中的SettingsCmd.java文件,末尾有命令的帮助 ...
- HDU 5399 Too Simple(过程中略微用了一下dfs)——多校练习9
Too Simple Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Probl ...
- sql遍历全部数据集
DECLARE @a int set @a = 1 while @a < 5 BEGIN select top(1) * from QPShuGameMatchDB..MatchScoreSta ...
- Java下Elasticsearh应用指南
简介 本文针对在Java下操作elasticsearch给出应用示例,主要涉及创建连接,构建索引以及检索数据3个部分. 环境 1)elasticsearch2.4.4, 2)jdk1.8. 客户端连接 ...
- keychain实现ssh对秘钥免登陆免输入密码
Linux同一网段实现密码认证,管理. 项目:https://github.com/funtoo/keychain 01.生成秘钥 ssh-keygen -t rsa # -t rsa | ds ...
- 老男孩Linux.shell.RHCE运维初中高级50G附解压密码
学习Linux,好的教程.使学习事半功倍! 老男孩Linux.shell.RHCE运维初中高级 下载地址: http://pan.baidu.com/s/1hsQOb2W 密码: h4hs 解压密码: ...
- PHP5.3新特性
1.首先对之前滥用的语法进行了规范 众所周知PHP在语言开发过程中有一个很好的容错性,导致在数组或全局变量中包含字符串不使用引号是可以不报错的,很多业余的开发者因为懒惰而产生的安全问题十分严重,之所以 ...
- WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件
1.找到如下地址“C:\Windows\System32\cmd.exe” 命令行工具,右键以管理员身份运行(视系统是否为win7 而定) 2.输入如下命令: C:\>cd C ...
- 摘:ClickOnce部署
ClickOnce部署 http://www.cnblogs.com/weixing/p/3358740.html#undefined (1):一些发布方式 ClickOnce是什么玩意儿,这个问题嘛 ...