PHP:从二进制数据中的任意偏移位置读取任意位数

时间:2010-07-15 04:14:00

标签: php binary bit-manipulation

我有一些二进制数据,它有一个相应的“map”文件,它通过提供一个位偏移和长度来识别二进制数据中的每个数据点。所以,我可能有以下映射:

$paths = array ( "path1" => array ("offset" => 224, "size" => 2),
                 "path2" => array ("offset" => 226, "size" => 6),
);

实际上,我有成千上万的这些路径来偏移/大小映射。现在,给定一条路径,我希望能够寻找适当的偏移量并读取大小给出的位数。在这个简单的例子中,path1和path2代表一个字节,其中path1是前2位,path2是最后6位。

我已经用Python写了这个,我现在将代码移植到PHP,原因我不会进入:)

无论如何,对于整个字节偏移的整个字节大小,我可以使用适当的格式字符串解压缩。我遇到的问题是如何处理这些“奇怪”大小的位组。

到目前为止,我想到的唯一方法是找到最接近的位偏移量,其中偏移模数8给出0(整个字节)并且小于给定的偏移量,然后找到最小的大小(再次以整个字节大小)从包含所有所需位的新偏移量开始,然后使用按位&掩盖我想要的位。

在Python中我可以使用bitbuffer模块让我寻找一点偏移,然后读取我想要的任意数量的位。 PHP世界中有这样的东西吗?

感谢。

1 个答案:

答案 0 :(得分:0)

使用位掩码抓取整个字节的解决方案听起来像是这样做的方法。然后我猜你也会做一个正确的移位,因为你感兴趣的位可能没有在字节边界上结束。

这样做会很慢,但我不知道任何可以做这种事情的内部PHP函数。