#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