【问题标题】:PHP binary manipulationPHP 二进制操作
【发布时间】:2014-01-07 16:21:27
【问题描述】:

好的,所以我在弄清楚这一点时遇到了一些麻烦(可能是由于我的无知)。

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

然后,将这 2 个字节块转换为以 10 为底的十进制数。

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

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

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


编辑:

为了后代:

PHP Manual - function.pack

PHP Manual - function.unpack

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

【问题讨论】:

    标签: php binary unpack


    【解决方案1】:

    应该这样做:

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

    n 是无符号短型(始终为 16 位,大端字节序)。对于*,此格式用于剩余的全部数据。

    【讨论】:

    • 希望我能给这个答案+100!
    • 非常简单。一个问题,如果我可以:如果二进制数据被简单地视为一个字符串,因此 substr 是一个可用的函数,为什么它打印/回显为“Þw,F
    • @SamanthaP base64_decode 返回一个字符串,你看到的“文本”就是数据对应的字符。
    • @Gumbo 好吧,非常感谢您的及时和非常有帮助的回答。 *吐司
    • @SamanthaP pack 期望这些值作为单独的参数。您可以使用call_user_func_array 调用具有数组中给定参数的函数:$bin === call_user_func_array("pack", array_merge(array("n*"), unpack("n*", $bin)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2021-07-25
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多