【问题标题】:pack format "Q" on PHP 5.5 / 32 bit machinesPHP 5.5 / 32 位机器上的打包格式“Q”
【发布时间】:2017-06-27 06:16:12
【问题描述】:

我想实现这里描述的东西:https://webapps.stackexchange.com/a/101153 in PHP。到目前为止,以下似乎工作:

编码

return rtrim(strtr(base64_encode(pack('Q', $int64)), '+/', '-_'), '=');

解码

$bytes = base64_decode(strtr($data, '-_', '+/'));
return unpack('Q', $bytes)[1];

不幸的是,这只适用于 64 位系统和 PHP5.6.3+,其中引入了“Q”格式的打包/解包。

我必须实现在 php5.5 64 和 32 位上相同的功能吗?

【问题讨论】:

  • 'Q' 依赖于机器的字节顺序比较棘手,但这可能会有所帮助:stackoverflow.com/a/41060369/468027
  • 感谢@Narf - 我想我可能已经中奖了:php.net/manual/en/function.base-convert.php#106546,很高兴您将其发布为答案,以便我接受?
  • 我不太愿意发布不完整的答案。另外,您正在做一些非常具体的事情,这不太可能帮助其他用户......无论如何都应该鼓励每个人升级他们的 PHP 版本。 :)

标签: php integer bit-manipulation backwards-compatibility


【解决方案1】:

正如@Narf 所指出的,使用这个:https://stackoverflow.com/a/41060369/468027 并将base_convert 替换为:http://php.net/manual/en/function.base-convert.php#106546 或http://php.net/manual/en/function.base-convert.php#109660 为我解决了这个问题。

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 2018-04-18
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多