MENU

PHP 模拟 Javascript 位移运算函数

December 31, 2020 • Read: 1162 • 程序源码

前言

在用PHP写爬虫的时候,难免会遇到一些Js加密运算,遇到就罢了;关键在于PHP和Js的位移运算结果是不一样,本质上的差别是因为两种语言对数字的处理方式不同;但是很幸运,各位前辈已经造好轮子,在此谢过知了大神~

Code:


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

/**
 * >> javascript operator in php x86_64
 *
 * @param int $v
 * @param int $n
 *
 * @return int
 */
function rr(int $v, int $n): int
{
    $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(int $v, int $n): int
{
    $t = ($v & 0xFFFFFFFF) << ($n & 0x1F);

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

/**
 * javascript逗号运算符(,)
 *
 * @param ...
 *
 * @return mixed
 */
function comma()
{
    $args = func_get_args();

    return end($args);
}

原文

作者:Neo Peng
地址:https://zhile.io/2018/06/21/php-equivalent-javascript-bitwise-operators.html