Featured image of post PHP 模拟 Javascript 位移运算函数

PHP 模拟 Javascript 位移运算函数

前言

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

Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

<?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

本文采用 CC BY 4.0 协议,转载请署名并注明出处。
最后更新于 2020-12-31 14:58:49
使用 Hugo 构建
主题 StackJimmy 设计