Это то, что я использую для преобразования 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 символа. Как я могу убедиться, что это произойдет?
Это уходит с ведущих нолей. Вы можете добавить их обратно через 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);
ip2long()
и не нужно использоватьbase_convert()
, что-то вродеstr_pad(decbin(ip2long('10.77.55.3')), 32, '0', STR_PAD_LEFT);