Я пытаюсь преобразовать значение HEX «0000» в значение BIN.
По математике:
(0000) 16 = (0000 0000 0000 0000) 2
но когда я пытаюсь использовать
$hex = '0000';
echo base_convert ($hex, 16, 2);
Я получаю 0 единиц от 0000 0000 0000 0000.
Это выглядит так же, но это не так.
В моем сценарии 16 бит представляют собой состояние цифровых выходов, сохраненных в виде значения HEX.
Что мне нужно изменить, чтобы все заработало как положено?
Вы получаете 0, потому что base_convert
не будет выводить больше цифр в строку результата, чем необходимо для представления числа. Вместо этого используйте hexdec
преобразовать строку в десятичное число, а затем использовать sprintf
чтобы получить вывод в виде 16 двоичных цифр, используя %b
спецификация преобразования:
$hex = '0000';
$bin = sprintf("%016b", hexdec($hex));
echo $bin;
Выход:
0000000000000000
Если вы действительно хотите пробелы между каждым блоком из 4 битов, вы можете использовать str_split
а также implode
например
echo implode(' ', str_split($bin, 4)) . "\n";
Выход:
0000 0000 0000 0000
PHP и Js имеют ту же проблему в моем опыте. Я использовал, чтобы проверить и добавить n 0, где это необходимо.