2015-10-20 86 views

回答

2

圍棋與Maciej Gol's answer,但這裏的另一種方式:

ip = '192.168.1.1' 
ip_as_bytes = bytes(map(int, ip.split('.'))) 

編輯:哎呀,這是唯一的Python 3.X。對於Python 2.X

ip = '192.168.1.1' 
ip_as_bytes = ''.join(map(chr,map(int,ip.split('.')))) 

,你已經開使用socket module,但是,考慮到其效率更好:

>>> timeit.timeit("socket.inet_aton('164.107.113.18')",setup='import socket') 
0.22455310821533203 
>>> timeit.timeit("''.join(map(chr,map(int,'164.107.113.18'.split('.'))))") 
3.8679449558258057 
5

使用socket.inet_aton

>>> import socket 
>>> socket.inet_aton('164.107.113.18') 
'\xa4kq\x12' 
>>> socket.inet_aton('127.0.0.1') 
'\x7f\x00\x00\x01' 

這將返回一個字節的字符串(或Python 3.x都有bytes對象),您可以從中獲取字節。另外,您也可以使用struct獲得每個字節的整數值:

>>> import socket 
>>> import struct 
>>> struct.unpack('BBBB', socket.inet_aton('164.107.113.18')) 
(164, 107, 113, 18) 
+0

那麼socket.inet_aton(addr)返回一個4個字符的字符串? – user3261349

+0

對於Python 2.x,「str」對象只是一個字節字符串,因此這4個字符代表4個字節。對於3.x它返回一個字節對象。 –