IPv4地址与整型类型互转_Java_PHP_JavaScript

原创 2015年08月16日 23:16:33

场景

部分PHP系统存储在数据库中的IP地址为ip2long的结果,Java系统需要与之交互,所以我们需要一个支持IP地址转换的工具类。

分析

1.IPv4地址可转换为一个32位整型的数字,

2.单纯移位操作会出现高位符号为负的情况需要转换

测试验证

Java

计算机生成了可选文字:3Ø61186S6Ø—182.118 .ø.ø 167839594—1Ø.1.7.1Ø6 3739221758—222.223.254.254

PHP

计算机生成了可选文字:$ipAddr '182.118.ø.ø'; $ipAddr ip210ng($ipAddr); echo ,$ipAddr); $ipAddr long2ip($ipAddr); echo ($ipAddr); echo "Xn";

JavaScript

计算机生成了可选文字:var ipNum undefined iNum 306118656ø ( ((182«24) (IIB 16) ip4; function long21P( longValueH ( tongVa var ipl var ip2 — (longVa — (tongVa var ip3 var ip4 longValue & øxff; + ip3 + return ipl 4 + ip2 undefined long21P ( ipNum) ; "182. IIB. a. Ø"

示例代码

package org.ybygjy.util;

/**
 * IPv4地址与整型类型互转
 * @author WangYanCheng
 * @version 2015年8月16日
 */
public class IPConvert {
	public static long ip2Long(String ipAddr) {
		String[] tmpIPData = ipAddr.split("\\.");
		int result = ((toUnsignedInt(Integer.parseInt(tmpIPData[0]))<< 24)
				| (toUnsignedInt(Integer.parseInt(tmpIPData[1])) << 16) 
				| (toUnsignedInt(Integer.parseInt(tmpIPData[2])) << 8) 
				| (toUnsignedInt(Integer.parseInt(tmpIPData[3]))));
		//无符号转换
		long rtnValue = toUnsignedLong(result);
		return rtnValue;
	}
	/**
	 * Int无符号转换
	 * @param intVal
	 * @return intVal
	 */
	private static int toUnsignedInt(int intVal) {
		int result = intVal & 0x7fff;
		if (intVal < 0) {
			result = result | 0x8000;
		}
		return result;
	}
	/**
	 * Long无符号转换
	 * @param longVal
	 * @return longVal
	 */
	private static long toUnsignedLong(long longVal) {
		//注意十六进制表示的变量类型为Long(L)
		long result = longVal & 0x07fffffffL;
		if (longVal < 0) {
			result = result | 0x080000000L;
		}
		return result;
	}
	/**
	 * 给定数值转换为对应的IP地址
	 * @param longValue
	 * @return
	 */
	public static String long2IP(long longValue) {
		int ip1 = (int) (longValue >> 24) & 0xff;
		int ip2 = (int) (longValue >> 16) & 0xff;
		int ip3 = (int) (longValue >> 8) & 0xff;
		int ip4 = (int) longValue & 0xff;
		return ip1 + "." + ip2 + "." + ip3 + "." + ip4;
	}
	/**
	 * 测试入口
	 * @param args
	 * @throws UnknownHostException
	 */
	public static void main(String[] args) {
		String[] ipArr = {"182.118.0.0", "10.1.7.106", "222.223.254.254"};
		for(int i = 0; i < ipArr.length; i++) {
			String ipAddr = ipArr[i];
			Long ipNumber = IPConvert.ip2Long(ipAddr);
			String ipStr = IPConvert.long2IP(ipNumber);
			System.out.println(ipNumber + "=>" + ipStr);
		}
	}
}

下载示例代码

http://download.csdn.net/detail/ybygjy/9013135

 

IPv4字符串和整数相互转换

在进行IP比较、查询的时候使用IP字符串比较相当麻烦,这个时候可以考虑将IP字符串转化为整数。 在运算完成之后,有需要将 整数转化为IPv4字符串以方便显示。 备忘如下: public clas...
  • whucyl
  • whucyl
  • 2014年03月09日 12:58
  • 4651

IP从整型地址转换为点分形式

题目描述: 通常我们在存储IPv4地址的时候不会直接使用字符串,例如192.168.1.1,我们不用“192.168.1.1”这个字符串来存储,而是将这个IP地址转换为一个无符号整数,因为一个IP...
  • yums467
  • yums467
  • 2016年09月27日 13:39
  • 1283

Delphi版IP地址与整型互转

  • 2013年05月08日 12:53
  • 2KB
  • 下载

ip地址与整型互转各种方法总结

方法1:php语言 PHP中提供了专门的函数用来将ip转换为整型:ip2long $ip="218.65.110.134"; echo ip2long($ip);方法2:Python http://...

SQL实现IPv4与数字互转

遇到了number与IP互转的需求,把搜索结果整理一下,以后使用时便于查找: (一)Oracle中: (1) IP转为数字: create or replace function ip2nu...
  • lk_blog
  • lk_blog
  • 2012年08月23日 22:45
  • 3429

JavaScript学习 CodeWars 打怪升级日记 判断输入字符串是否符合IPv4地址标准

CodeWars 是一个在线编程网站,其奖励机制像打怪升级。你不能查看高于你级别的问题的答案。除非自己通过提交测试。通过提交之后可以看到各种解法排行榜 。通过对比自己解法和排行榜对比,可以找到差距,提...

c函数之sprintf,sscanf函数使用(字符串与整型互转函数)

1)sprintf     字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。 函数原型:     int sprintf( char *buffer...

实战c++中的string系列--string与整型或浮点型互转

原文链接:点击打开链接 教科书中很少会提到string与int或是float的相互转换,但是在实际工程中会经常遇到,尤其在做UI控件显示的时候。比如说你要在edit控件中显示一个数值,那你就需...

java从网上获取ipv4的地址信息

目的:获取ip对应的地理位置 方法:从http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest获取国际最新的ip分布信息,然后筛选出...

PHP和MySQL 实现IP地址和十进制数字互转

一、PHP IP地址和十进制数字互转 http://blog.csdn.net/iua1024/article/details/5145963 IPV4 可以看做4个256...
  • niao_ye
  • niao_ye
  • 2014年09月29日 10:09
  • 349
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IPv4地址与整型类型互转_Java_PHP_JavaScript
举报原因:
原因补充:

(最多只允许输入30个字)