поиск:    

 
переход:  



Екатеринбург Онлайн
Новости:  Автоновости  |  Публикации:  Дороги  |  Форумы:  Автофорум

  Форумы  > Автоклуб > Общение Автоклуба  

ОАК ЗВ - ip_network ???


Список Тем  |   Поиск  |   Правила  |   Статистика  |
ОАК ЗВ - ip_network ???   #22613151  наверх
Автор: 
Дата:   

Сделал такую программу на Питоне:

from ipaddress import *

net = ip_network(f'142.108.56.118/255.255.255.240',strict=False)
for ip in net:
ip_2 = bin(int(ip))[2:]
print('net =', net, 'ip_2 =', ip_2 , 'n = ', len(str(ip_2)))

net = ip_network(f'116.29.170.89/255.255.255.224',strict=False)
for ip in net:
ip_2 = bin(int(ip))[2:]
print('net =', net, 'ip_2 =', ip_2 , 'n = ', len(str(ip_2)))


Результат работы:
net = 142.108.56.112/28 ip_2 = 10001110011011000011100001111111 n = 32
net = 116.29.170.64/27 ip_2 = 1110100000111011010101001011111 n = 31


Почему в первом случае двоичное число имеет 32 бита (и это правильно), а во втором - 31 бит?
Что не так и как надо?
Спасибо.

P.S. Файл: https://disk.yandex.ru/d/2Z8haARriL6ZWw

[Сообщение изменено пользователем 20.02.2024 13:37]
0/10 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613166  наверх
Автор: [ Dr. Andy ] 
Дата:   


Цитата:
От пользователя: Пирожок - L1D 14075 4C

P.S. Файл: https://disk.yandex.ru/d/2Z8haARriL6ZWw

парни, не качайте файл - там вирус :ultra:
9/0 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613175  наверх
Автор: Капитан Джек Дэниэлс 
Дата:   


Цитата:
От пользователя: Пирожок - L1D 14075 4C

Почему в первом случае двоичное число имеет 32 бита

Вы чо в куда переводите?
Может вам изучить основы нетмаскинга?

Глянул код, не пишите больше, не ваше это
3/1 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613178  наверх
Автор: Гватемала Лонг
Дата:   


Цитата:
От пользователя: Пирожок - L1D 14075 4C

Сделал такую программу на Питоне

Так Вам на форум животноводства надо, а не общение автоклуба.
9/1 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613181  наверх
Автор: Пирожок - L1D 14075 4C
Дата:   


Цитата:
От пользователя: [ Dr. Andy ]

парни, не качайте файл - там вирус :ultra:


Если бы я мог в текстовый файл засунуть вирус, то вряд-ли задавал такой вопрос.
0/3 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613196  наверх
Автор: Пирожок - L1D 14075 4C
Дата:   


Цитата:
От пользователя: Капитан Джек Дэниэлс


Вы чо в куда переводите?

Там написано чё и куда...

Это фрагменты ЕГЭшных задач.
0/4 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613214  наверх
Автор: Гватемала Лонг
Дата:   

Где 32, там 17 символов. А где 31, там 16 символов.
3/0 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613271  наверх
Автор: Пирожок - L1D 14075 4C
Дата:   

Во втором случае ведущий ноль игнорируется.
0/3 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613322  наверх
Автор: Maple 
Дата:   

Проблема в вашем коде заключается в том, как функция bin() возвращает двоичное представление числа. Функция bin() возвращает строку, которая начинается с префикса '0b', обозначающего двоичное число, и потом следует само двоичное число. Однако, если старшие биты числа являются нулями, они не будут отображаться в строке, что приводит к тому, что старшие нули будут отсечены и строка будет содержать меньше символов, чем полное 32-битное представление.

Для решения этой проблемы, вам необходимо форматировать строку так, чтобы она дополнялась нулями слева до 32 символов. В Python это можно сделать с помощью метода str.zfill() или форматирования строк с помощью метода format().

Вот исправленная версия вашего кода, в которой используется метод format() для гарантии, что двоичное число будет иметь ровно 32 бита:

```python
from ipaddress import ip_network

net = ip_network(f'142.108.56.118/255.255.255.240', strict=False)
for ip in net:
ip_2 = bin(int(ip))[2:].zfill(32)
print('net =', net, 'ip_2 =', ip_2, 'n = ', len(ip_2))

net = ip_network(f'116.29.170.89/255.255.255.224', strict=False)
for ip in net:
ip_2 = bin(int(ip))[2:].zfill(32)
print('net =', net, 'ip_2 =', ip_2, 'n = ', len(ip_2))
```

Теперь, независимо от того, какое значение имеет IP-адрес, двоичное представление всегда будет иметь длину в 32 символа за счет использования zfill(32), которая дополняет строку нулями слева до желаемой длины.
4/0 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613325  наверх
Автор: Maple 
Дата:   

чат гпт
3/0 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22613334  наверх
Автор: Пирожок - L1D 14075 4C
Дата:   

Спасибо!
0/2 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22614939  наверх
Автор: [ Dr. Andy ] 
Дата:   


Цитата:
От пользователя: Пирожок - L1D 14075 4C

на Питоне

у мну питон 75 см :beach:
2/4 |    |  Поделиться:  
Re: ОАК ЗВ - ip_network ???   #22615035  наверх
Автор: Shadoved_76
Дата:   


Цитата:
От пользователя: [ Dr. Andy ]

у мну питон 75 см :beach:

Детский питон. В зоопарке 5 метровый живет.
5/4 |    |  Поделиться:  
Список Тем  |   Поиск  |   Правила  |   Статистика  |

Внимание! сейчас Вы не авторизованы и не можете подавать сообщения как зарегистрированный пользователь. Чтобы авторизоваться, нажмите на эту ссылку (после авторизации вы вернетесь на эту же страницу)


 Мой E1 
 
Вход для зарегистрированных пользователей:
E-mail:
Пароль:
Если Вы не зарегистрированы, то добро пожаловать на страницу регистрации.
Если Вы зарегистрированы, но забыли пароль, Вы можете его запросить.

Развернуть блок
 Погода