- array_pad: documentation ( source)
- pack: documentation ( source)
- array_fill: documentation ( source)
- unpack: documentation ( source)
- printf: documentation ( source)
<?php
$mask = 127;
$blocks = (int)($mask / 16);
$b = unpack('n*', pack('n*', ...array_fill(0, $blocks, 0xffff), ...array_pad([~((2 ** ($mask % 16)) - 1) & 0xffff], 8 - $blocks, 0)));
foreach ($b as $block) {
printf("%016b\n", $block);
}