2013-11-02 2 views
0

Мне нужна программа, которая преобразует введенный пользователем адрес IPv4 в двоичный и базовый 10-й адрес. Что-то вроде этого:Преобразование десятичного IP-адреса в двоичный файл (Python)

input: 142.55.33.1 
output (base 10): [2385977601] 
output (base 2): [10001110 00110111 00100001 00000001] 

До сих пор мне удалось преобразовать его в адрес base10, но я не могу показаться, чтобы обойти эту проблему базы 2:

#!/usr/bin/python3 

ip_address = input("Please enter a dot decimal IP Address: ") 

#splits the user entered IP address on the dot 
ListA = ip_address.split(".") 
ListA = list(map(int, ListA)) 

ListA = ListA[0]*(256**3) + ListA[1]*(256**2) + ListA[2]*(256**1) + ListA[3] 
print("The IP Address in base 10 is: " , ListA) 

#attempt at binary conversion (failing) 
#ListA = ListA[0]*(2**3) + ListA[1]*(2**2) + ListA[2]*(2**1) + ListA[3] 
#print("The IP Address in base 2 is: " , ListA) 

Любая помощь будет высоко оценен , Спасибо.

ответ

4

Использование format:

>>> text = '142.55.33.1' 
>>> ' ' .join(format(int(x), '08b') for x in text.split('.')) 
'10001110 00110111 00100001 00000001' 

В случае, если вы хотите получить список:

>>> [format(int(x), '08b') for x in text.split('.')] 
['10001110', '00110111', '00100001', '00000001'] 

Здесь формат преобразует целое число в двоичное строковое представление:

>>> format(8, 'b') 
'1000' 
>>> format(8, '08b') #with padding 
'00001000' 
+0

Большое вам спасибо! Это очень помогло! – user1819786

1

Использование str.format:

>>> ip_address = '142.55.33.1' 
>>> ['{:08b}'.format(int(n)) for n in ip_address.split('.')] 
['10001110', '00110111', '00100001', '00000001'] 
>>> ' '.join('{:08b}'.format(int(n)) for n in ip_address.split('.')) 
'10001110 00110111 00100001 00000001' 
+0

['{: 08b}'. Format (int (n)) для n в ip_address.split ('.')] <- можете ли вы любезно объяснить, что здесь происходит? – user1819786

+0

@ user1819786, '[... для элемента в seq]' называется [** list comprehension **] (http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions). – falsetru

+0

'str.format' используется для создания двоичного представления числа. Например, '' {: 08b} '. Format (3) 'дает' 00000011'. См. [Формат строкового синтаксиса] (http://docs.python.org/2/library/string.html#formatstrings). – falsetru

Смежные вопросы