Ошибка в длине IP-адреса при преобразовании из DDN в двоичный

0

Это то, что я использую для преобразования IP-адресов из Dotted Decimal Notation в двоичный:

base_convert(bin2hex(inet_pton($ip_address),16,2)

Кажется, что это работает отлично для большинства IP-адресов, но некоторые из них приводят к меньшей выходной строке (т.е. не более 32 символов). Например, это два выхода:

10.77.55.3
172.30.99.4

стали

1010010011010011011100000011
10101100000111100110001100000100

Я ожидаю, что после ввода всех IP-адресов ввода будет 32 символа. Как я могу убедиться, что это произойдет?

Теги:

1 ответ

2
Лучший ответ

Это уходит с ведущих нолей. Вы можете добавить их обратно через str_pad.

str_pad(base_convert(bin2hex(inet_pton($ip_address),16,2)), 32, '0', STR_PAD_LEFT)

Или, чтобы уменьшить вызовы функций и избежать base_convert(), вы могли бы сделать так, как предложил Майкл:

str_pad(decbin(ip2long('10.77.55.3')), 32, '0', STR_PAD_LEFT);
  • 2
    Также стоит отметить, что это можно сделать с помощью ip2long() и не нужно использовать base_convert() , что-то вроде str_pad(decbin(ip2long('10.77.55.3')), 32, '0', STR_PAD_LEFT);
  • 0
    @MichaelBerkowski Пожалуйста, рассмотрите возможность добавления своего комментария в качестве ответа, чтобы я мог хотя бы проголосовать за него;)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню