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

本文介绍了如何使用PHP、Python、Shell脚本及MySQL等不同编程环境实现IP地址与整数之间的相互转换,包括具体函数和示例代码。

方法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用法

方法3:Shell

 

#!/bin/bash
#ip2int:ip地址转整型
#int2ip:整型转ip
function 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=123456789
ip2int $a
int2ip $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地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值