PHP模擬javascript的位移運算符

博主這幾天在搗鼓爬蟲,不可避免的須要去模擬一些網站變態的加密算法(順便吐槽一句:大家這些網站真的很不友善!)。

既然是加密算法那麼位運算就是不可或缺的了。相比較javascript而言,PHP沒有>>>這種無符號右移的運算符,並且就算是普通的<<左移和>>右移運算符,PHP算出來的結果也會不一樣於javascript。因此只能打模擬js位移運算符的主意了。

上網爬了一圈,在stackoverflow上發現一篇帖子(傳送門)在聊這個問題,帖子裏有貼一些>>>運算符實現的代碼。遺憾的是我沒能看懂,只能本身來擼一個了(已回覆該帖,有緣的朋友給個up吧)。

而後的而後就有了下面的代碼。各位若是有一樣的困惑儘管拿去用(每一個函數都配合nodejs作了10w+次的測試,應該沒問題)。

/**
 * >>> 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);
}
最後,爲何用PHP來作爬蟲?

PHP是世界上最好的語言,不接受任何反駁。
PHP的語法和javascript比較像,我想移植要容易一些吧。
我只會PHP,大家滿意了嗎?
爲了不代碼出現橫向滾動條,請僞裝縮進是4個空格~

 
 
本文做者: Neo Peng
本文連接: https://zhile.io/2018/06/21/php-equivalent-javascript-bitwise-operators.html
版權聲明: 本博客全部文章除特別聲明外,均採用 CC BY-NC-ND 4.0 許可協議。轉載請註明出處!
相關文章
相關標籤/搜索