JS的位移运算符转换成PHP

这几天在捣鼓别人的影视解析接口,不可避免的需要去模拟一些网站变态的加密算法。
既然是加密算法那么位运算就是不可或缺的了。相比较javascript而言,PHP没有>>>这种无符号右移的运算符,而且就算是普通的<<左移和>>右移运算符,PHP算出来的结果也会不同于javascript。所以只能打模拟js位移运算符的主意了。
上网爬了一圈,在stackoverflow上发现一篇帖子(传送门)在聊这个问题,帖子里有贴一些>>>运算符实现的代码。
然后的然后就有了下面的代码。各位如果有同样的困惑尽管拿去用。

/**
 * >>> javascript operator in php x86_64
 * @param int $v
 * @param int $n
 * @return int
 */
function rrr($v, $n)
{
  return ($v & 0xFFFFFFFF) >> ($n & 0x1F);
}

/**
 * >> javascript operator in php x86_64
 * @param int $v
 * @param int $n
 * @return int
 */
function rr($v, $n)
{
  $v = $v & 0x80000000 ? $v | 0xFFFFFFFF00000000 : $v & 0xFFFFFFFF;

  return $v >> ($n & 0x1F);
}


/**
 * << javascript operator in php x86_64
 * @param int $v
 * @param int $n
 * @return int
 */
function ll($v, $n)
{
  $t = ($v & 0xFFFFFFFF) << ($n & 0x1F);

  return $t & 0x80000000 ? $t | 0xFFFFFFFF00000000 : $t & 0xFFFFFFFF;
}

PHP对javascript逗号运算符(,)的模拟。
转换效果(js to PHP):
if (i = 0, j = 1, k =2) {} to if (comma($i = 0, $j = 1, $k = 2)) {}

/**
 * @param ...
 * @return mixed
 */
function comma()
{
  $args = func_get_args();
  return end($args);
}

最后,为什么要把JS算法改成PHP?
PHP是世界上最好的语言,不接受任何反驳。
PHP的语法和javascript比较像,我想移植要容易一些吧。
我只会PHP,你们满意了吗?

给TA买糖
共{{data.count}}人
人已赞赏
技术文档

PHP缓存工具类 实现网页缓存

2022-5-20 19:00:38

技术文档

每天只加载展示一次的广告样式

2018-1-1 18:54:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
搜索