public static function printableBitValue($value, $length)
{
// if running on a 64-bit server or the length is safe for decbin()
if (PHP_INT_SIZE == 8 || $length < 33) {
$printable = decbin($value);
} else {
// FIXME: does not work for the leftmost bit of a 64-bit value
$i = 0;
$printable = '';
while ($value >= pow(2, $i)) {
++$i;
}
if ($i != 0) {
--$i;
}
while ($i >= 0) {
if ($value - pow(2, $i) < 0) {
$printable = '0' . $printable;
} else {
$printable = '1' . $printable;
$value = $value - pow(2, $i);
}
--$i;
}
$printable = strrev($printable);
}
$printable = str_pad($printable, $length, '0', STR_PAD_LEFT);
return $printable;
}