您的位置:首页 > 编程语言 > Python开发

IP地址与整形转换 java,python实现

2013-11-29 11:42 429 查看
java 版:

注意使用java进行转换时,由于int是有符号的,符号占去了最高位,故表达范围不足以表示ip地址。

还有就是

public long transIP2Long(String ip) {
if(ip.length()<8)
return LENGTH_ILLEGAL_IP;
long addr;
long[] parts = new long[4];// all long ,in case of the number overflowed and become -,not +.
try {

String[] ipArr = ip.split("\\.");
if(ipArr.length>4)
throw new NumberFormatException();
parts[0] = (Integer.parseInt(ipArr[0]) & 0xFF);
parts[1] = (Integer.parseInt(ipArr[1]) & 0xFF);
parts[2] = (Integer.parseInt(ipArr[2]) & 0xFF);
parts[3] = (Integer.parseInt(ipArr[3]) & 0xFF);
} catch (NumberFormatException e) {
//xxxxxxxxxxxxxx
}

addr = parts[3] & 0xFF;
addr |= ((parts[2] << 8) & 0xFF00);
addr |= ((parts[1] << 16) & 0xFF0000);
addr |= ((parts[0] << 24) & 0xFF000000);

return addr;
}


python的写法似乎简单了很多,借助socket和struct即可完成

#!/usr/bin/python

#int to ip,ip to int

import socket
import struct

def int2ip(value):
ip=socket.inet_ntoa(struct.pack('I',socket.htonl(value)))
return ip

def ip2int(ip):
val = socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip)))[0])
return val


参考文章:点击打开链接

如果是在数据库操作时需要做转换,那么数据库本身已经提供了相关的转换函数

例如My SQL : INET_ATON(XX) ..... INET_NTOA(XX)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: