PHP преобразует dec в битовый массив с предопределенной длиной

#php #arrays #byte #bit

#php #массивы #байт #бит

Вопрос:

Я запутался в том, как сделать простую вещь, возможно, кто-нибудь сможет мне помочь.

В какой-то момент моего кода я преобразую битовый массив с 10 сигналами тревоги (0 или 1) в десятичный и сохраняю его. В другой момент я загружаю десятичное число и хочу преобразовать его обратно в битовый массив.

Это работает, однако битовый массив всегда должен иметь длину 10, даже если десятичная длина не равна 10 битам.

Смотрите мой код:

 // Convert array to dec:
$alarms = array(0,0,1,0,0,0,1,0,0,0);
$str = implode("", $alarms);
$dec = bindec($str);

// Convert back to bit array:
$bin = decbin($dec);

echo $bin;
 

Результатом этого кода является:

10001000

Но должно быть:

0010001000

Спасибо!

Комментарии:

1. Биты пишутся справа налево, и поэтому любые начальные нули не имеют значения. Если вам нужно какое-то дополнение, вы можете просто добавить его самостоятельно.

Ответ №1:

Вот идея о том, как вы могли бы это реализовать.

 <?php

// Input array of bits
$inBits = [0,0,1,0,0,0,1,0,0,0];
// Convert to decimal value
$value = bindec(implode('', $inBits));
// Convert back to string of 0/1, adding padding as needed.
$outBitStr = str_pad(decbin($value), count($inBits), '0', STR_PAD_LEFT);

var_dump(implode('', $inBits) === $outBitStr); // TRUE