1. 程式人生 > >python整數與IP地址轉換 python整數與IP地址轉換 [轉]

python整數與IP地址轉換 python整數與IP地址轉換 [轉]

python整數與IP地址轉換 [轉]

我們有時會將一個整數與IP地址進行互換,用python程式碼實現很簡單
將一個整數如2000000,變為一個IP地址的方式 >>> import socket >>> import struct >>> int_ip = 123456789 >>> ip = socket.inet_ntoa(struct.pack('I',socket.htonl(int_ip)))      #int to ip address '7.91.205.21' >>> socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip)))[0])     #ip address to int 123456789L

其實這是進位制數的轉換,我們可以自己寫程式碼
# 整數to IP地址格式 >>> 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地址進行互換,用python程式碼實現很簡單
將一個整數如2000000,變為一個IP地址的方式 >>> import socket >>> import struct >>> int_ip = 123456789 >>> ip = socket.inet_ntoa(struct.pack('I',socket.htonl(int_ip)))      #int to ip address '7.91.205.21' >>> socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip)))[0])     #ip address to int 123456789L

其實這是進位制數的轉換,我們可以自己寫程式碼
# 整數to IP地址格式 >>> 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