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

来源:互联网 发布:深圳可变数据印刷 编辑:程序博客网 时间:2024/06/06 00:02

方法1:php语言

PHP中提供了专门的函数用来将ip转换为整型:ip2long以及long2ip

$ip="218.65.110.134";echo ip2long($ip);print  long2ip('123456789');

方法2:Python

python有两种方法:

>>> import socket>>> import struct>>> socket.inet_ntoa(struct.pack('I', socket.htonl(123456789)))'7.91.205.21'>>> socket.ntohl(struct.unpack('I', socket.inet_aton(str('7.91.205.21')))[0])123456789L
推荐使用下面这种方法:

>>> ip = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])>>> ip(123456789)'7.91.205.21'>>> ip = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])])>>> ip('7.91.205.21')123456789
这一种方法使用lambda构造匿名函数。有关匿名函数lambda以及enumerate的用法参见:

python的lambda函数介绍

python enumerate用法

补充:

def longtoip(x):        return '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])def iptolong(ip):                return reduce(lambda x,y:(x<<8)+y,map(int,ip.split('.')))

方法3:Shell

#!/bin/bash#ip2int:ip地址转整型#int2ip:整型转ipfunction ip2int(){    A=$(echo $1 | cut -d '.' -f1)    B=$(echo $1 | cut -d '.' -f2)    C=$(echo $1 | cut -d '.' -f3)    D=$(echo $1 | cut -d '.' -f4)    result=$(($A<<24|$B<<16|$C<<8|$D))    echo $result}function int2ip(){    A=$((($1 & 0xff000000 ) >>24))    B=$((($1 & 0x00ff0000)>>16))    C=$((($1 & 0x0000ff00)>>8))    D=$(($1 & 0x000000ff))    result=$A.$B.$C.$D    echo $result}a='7.91.205.21'b=123456789ip2int $aint2ip $b
ip2int方法中使用左移位操作;int2ip方法中先使用位与运算,再作位右移。
方法4:Mysql

SELECT INET_ATON('1.1.1.1') as IP;SELECT INET_NTOA('123456789') as IP;
INET_ATON方法用于将点分十进制的ip地址转换为整型;

INET_NTOA方法用于将整型转换为对应的点分十进制的ip地址。

本文为Eliot原创,转载请注明出处:http://blog.csdn.net/xyw_blog/article/details/18358071

0 0
原创粉丝点击