PHP: чтение произвольного числа бит из произвольной позиции смещения в двоичных данных - PullRequest
0 голосов
/ 15 июля 2010

У меня есть некоторые двоичные данные, у которых есть соответствующий файл «карты», который идентифицирует каждую точку данных в двоичных данных, предоставляя битовое смещение и длину. Итак, у меня могут быть следующие сопоставления:

$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?

Спасибо.

1 Ответ

0 голосов
/ 15 июля 2010

Ваше решение захвата целых байтов с использованием битовой маски звучит как способ сделать это.Тогда, я думаю, вы также сделаете правильный сдвиг, учитывая, что интересующие вас биты могут не заканчиваться на границе байтов.

Это будет медленный способ сделать это, но я незнать о любой внутренней функции PHP, которая может делать подобные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...