>>
  
  
   >
  
  
   import
  
  struct
  
   >>
  
  
   >
  
  int_ip
  
   =
  
  
   123456789
  
  
   >>
  
  
   >
  
  ip
  
   =
  
  socket
  
   .
  
  inet_ntoa
  
   (
  
  struct
  
   .
  
  pack
  
   (
  
  
   'I'
  
  
   ,
  
  socket
  
   .
  
  htonl
  
   (
  
  int_ip
  
   )
  
  
   )
  
  
   )
  
  
  
   '7.91.205.21'
  
  
   >>
  
  
   >
  
  socket
  
   .
  
  ntohl
  
   (
  
  struct
  
   .
  
  unpack
  
   (
  
  
   "I"
  
  
   ,
  
  socket
  
   .
  
  inet_aton
  
   (
  
  
   str
  
  
   (
  
  ip
  
   )
  
  
   )
  
  
   )
  
  
   [
  
  
   0
  
  
   ]
  
  
   )
  
  
  123456789L
  
   其实这是进制数的转换,我们可以自己写代码
  
  遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
  
  
   >>
  
  
   >
  
  
   def
  
  
   ch1
  
  
   (
  
  num
  
   )
  
  
   :
  
  s
  
   =
  
  
   [
  
  
   ]
  
  
   for
  
  i
  
   in
  
  
   range
  
  
   (
  
  
   4
  
  
   )
  
  
   :
  
  s
  
   .
  
  append
  
   (
  
  
   str
  
  
   (
  
  num
  
   %
  
  
   256
  
  
   )
  
  
   )
  
  num
  
   /=
  
  
   256
  
  
   return
  
  
   '.'
  
  
   .
  
  join
  
   (
  
  s
  
   [
  
  
   :
  
  
   :
  
  
   -
  
  
   1
  
  
   ]
  
  
   )
  
  
   >>
  
  
   >
  
  ch1
  
   (
  
  
   123456789
  
  
   )
  
  
   '7.91.205.21'
  
  
   用lambda的方式,整数toIP 地址 一行代码搞定
  
  >>> ch2 = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])
>>> ch2(123456789)
'7.91.205.21'
用lambda的方式,IP地址转换到整数
 
>>> ch3 = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])])
>>> ch3('7.91.205.21')
123456789
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                     00000000
3                    00000011
193                  1
				Python IP地址转整数和整数转IP地址IP地址转整数代码:[root@ops-ip-statistic]# cat iptonum.py 
#!/usr/bin/env python
import sys
ip=sys.argv[1]
				[steven@txzxp2 test]$ 
python
Python 2.7.5 (default, Jul  8 2013, 09:48:59) 
[GCC 4.8.1 20130603 (Red Hat 4.8.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
				
1. strip 函数接受参数,可删除两边的字符,例如 strip('0b') 0和b是或的关系。在代码中使用了lstrip 是因为bin函数进行转换成二进制数字时会自动添加0b
2. zfill的功能是将字符串右对齐,前面用0补齐。
3. 代码中调用的方法对于参数有要求是字符串或是整型的,这点需要注意转换
代码实现:
def integerToIP(integer):
bi = "0"*(32-len(bi))+bi
# 8个一组算出每8个数字的十进制,然后再加“,”分隔
ret_ip_string = '.'.join(list(map(lambda x:str(int(x,2)),re.findall(r'.{8}',bi))))
# 打印ip字符串
大家应该都有所体会,对于字符串型的IP存入数据库中,实在是个即浪费空间又浪费性能的家伙,所以可爱的人们想出来将IP转换为整型存储。MySQL中存在INET_ATON() 、INET_NTOA()函数进行IP整型和字符串之间的转换,那么Python中存在什么方法可以实现MySQL中INET_ATON() 、INET_NTOA()的功能呢?方法肯定是有的~
# 导入相关模块包
import socket
import struct
# 将IP从字符串转为整型
>>> int(socket.inet_aton('127.0.0.1').encode('hex'),16)
21307
原理:
ip地址的每段可以看成是
一个0-255的
整数,把每段拆分成
一个二进制形式组合起来,然后把这个二进制数转变成
一个长
整数。
举例:
一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                            00001010
				
# 数字 ==> ip # 数字范围[0, 255^4]
>>> num2ip = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])
>>> num2ip(3232235521)
'192.168.0.1'
# ip ==> 数字
注意:IP可能超过int需要用无符号整型,并且牛客的判题系统while中的scanf必须要不等于EOF不然会出错。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int main(){
    unsigned int...
                    
                python教程:读取.dcm文件,并转化为.jpg格式
                    NAhahahahaha: 
                    
                Python复制文件的9个方法
                    清韵凌波: 
                    
                python下载文件的三种方法
                    OTZ_2333: