IPv6 преобразование по префиксу

GiperScriper

Новичок
Пример входных данных:

PHP:
$ip = '2001:db8::1428:54ab';
$perfix = '64';
Далее используем inet_pton($ip) и проходим по нему:

PHP:
$addr = inet_pton($ip);

$addr_str = '';

foreach(str_split($addr) as $char) {
    $addr_str .= str_pad(dechex(ord($char)), 2, '0', STR_PAD_LEFT);
}

echo $ip_str;
на выходе получаем:

PHP:
20010db80000000000000000142854ab
можно разбить адрес на массив по 4 символа, для дальнейшей работы, вопрос как мне это преобразовать в двоичную систему, чтобы получить строку из 128 символов, либо массив 16 по 8, для того чтобы имея префикс, к примеру в данном случае 64, я мог их поставить последние 64 бита в 0 (для моей подсети), затем снова преобразовать в hex и вывести ? что посоветуете использовать?
 

billyrubin

Новичок
До двух двоеточий (старшие 64 бита) — префикс сети, после — идентификатор интерфейса (еще 64 бита). Обнуляешь вторую часть — получаешь искомое. Или я что-то не так понял?
 
Сверху