У меня есть некоторые двоичные данные, у которых есть соответствующий файл «карты», который идентифицирует каждую точку данных в двоичных данных, предоставляя битовое смещение и длину. Итак, у меня могут быть следующие сопоставления:
$paths = array ( "path1" => array ("offset" => 224, "size" => 2),
"path2" => array ("offset" => 226, "size" => 6),
);
На самом деле у меня есть десятки тысяч этих путей для сопоставления смещения / размера. Теперь, учитывая путь, я хочу иметь возможность искать соответствующее смещение и считывать количество битов, заданное размером. В этом простом случае path1 и path2 представляют один байт, где path1 - первые 2 бита, а path2 - последние 6 бит.
Я уже написал это на Python и теперь портирую код на PHP по причинам, в которые я не буду вдаваться:)
В любом случае, для размеров целых байтов при смещениях в целых байтах я могу просто использовать unpack с соответствующей строкой формата. У меня проблема с обработкой этих «странных» наборов битов.
Единственный способ, о котором я до сих пор думал, это найти смещение ближайшего бита, где модуль смещения 8 дает 0 (целый байт) и меньше заданного смещения, а затем найти наименьший размер (опять же в целых размерах байтов) из этого нового смещения, которое охватывает все требуемые биты, затем используйте побитовое отображение &, чтобы замаскировать нужные мне биты.
В Python я мог просто использовать модуль bitbuffer, который позволял мне искать смещение битов, а затем читать любое количество битов, которое я хотел. Что-нибудь подобное в мире PHP?
Спасибо.