2013-12-19 63 views
0

好吧,所以我有点麻烦(可能是由于我的无知)弄清楚了这一点。PHP二进制操作

$binary = base64_decode("AAAAAgYA3ncsRjy9"); 

所以,我在这里有12个字节的二进制数据,是吗?

我需要把它变成:

$binary = array("0"=>"00000000", "1"=>"00000000", "2"=>"00000000", "3"=>"00000010", "4"=>"00000110", "5"=>"00000000", "6"=>"11011110", "7"=>"01110111, "8"=>"00101100", "9"=>"01000110", "10"=>"00111100", "11"=>"10111101"); 

而且,最终,丢弃前6个字节,其余分成2个字节对​​。

$binary = array("0"=>"1101111001110111", "1"=>"0010110001000110", "2"=>"0011110010111101" 

然后,将这两个字节的块转换为10位十进制数。

$binary = array("0"=>"56951", "1"=>"11334", "2"=>"15549"); 

我选择包含实际数据的原因是因为我想确保使用正确的术语。我一直在尝试使用pack/unpack,并且根本无法完成这项工作,可能是由于我不了解格式参数的不同可用选项。

我确定我的解释非常混乱,请接受我的道歉。任何帮助将不胜感激。


编辑:

为后人:

PHP Manual - function.pack

PHP Manual - function.unpack

PHP Manual - function.call-user-func-array

回答

3

这应做到:

$binary = base64_decode("AAAAAgYA3ncsRjy9"); 
$binary = substr($binary, 6); 
var_dump(unpack("n*", $binary)); 

n是无符号短(总是16位,大端字节顺序)。使用*这种格式用于整个剩余的数据。

+0

希望我能给+100这个答案! –

+0

绝对非常简单。一个问题,如果我可以:如果二进制数据被简单地视为一个字符串,因此substr是一个可用的函数为什么它打印/回显出“Þw,F <½”? –

+1

@SamanthaP'base64_decode'返回一个字符串,你看到的'文本'是数据对应的字符。 – Gumbo