PHP异或运算两个数

PHP异或运算两个数,php,xor,Php,Xor,我尝试对两个值进行异或运算,如下所示: 变量1:6463334891 变量2:1000212390 当我在php中使用这些值执行xor时,它给出了错误的答案 它应该给我7426059853 这是我的密码 $numericValue = (int)$numericValue; $privateKey = (int)$privateKey; echo "Type of variable 1 ".gettype($numericValue)."<br />"; echo "Ty

我尝试对两个值进行异或运算,如下所示:

变量1:6463334891 变量2:1000212390

当我在php中使用这些值执行xor时,它给出了错误的答案

它应该给我7426059853

这是我的密码

 $numericValue = (int)$numericValue;
 $privateKey = (int)$privateKey;
 echo  "Type of variable 1 ".gettype($numericValue)."<br />";
 echo  "Type of variable 2 ".gettype($privateKey)."<br />";
 $xor_val = (int)$numericValue ^ (int)$privateKey;
 echo "XOR Value :".$xor_val."<br />";

只是一次彻底的黑暗刺杀

您正在这样做:

echo "6463334891" ^ "1000212390";
echo 6463334891 ^ 1000212390;
当您想这样做时:

echo "6463334891" ^ "1000212390";
echo 6463334891 ^ 1000212390;
XOR是对字节的操作。整数6463334891和字符串6463334891的字节表示形式非常不同。因此,根据操作数是字符串还是整数,此操作将产生非常不同的值。如果以字符串形式获取数字,请先将其转换为整数:


这是因为您达到了最大整数限制2147483647

从PHP文档中。。。 最大值取决于系统。32位系统的最大 有符号整数范围为-2147483648到2147483647。比如说 这样一个系统,intval'1000000000000'将返回2147483647。这个 64位系统的最大有符号整数值为 9223372036854775807

因此,要处理如此大的整数,您需要使用如下扩展


否则,切换到64位系统。

我维护大整数值的解决方案是使用base\u convert将它们转换为二进制,因为decbin不起作用,然后对每一位进行异或,最后将字符串转换为十进制

function binxor($w1,$w2)
{
    $x=base_convert($w1, 10, 2);

    $y=base_convert($w2, 10, 2);

    // adjust so both have same lenght

    if (strlen($y)<strlen($x)) $y=str_repeat(0,strlen($x)-strlen($y)).$y;

    if (strlen($x)<strlen($y)) $x=str_repeat(0,strlen($y)-strlen($x)).$x;


    $x=str_split($x);$y=str_split($y);

    $z="";
    for ($k=0;$k<sizeof($x);$k++)
    {
        // xor bit a bit
        $z.=(int)($x[$k])^(int)($y[$k]);
    }

    return base_convert($z,2,10);   
}

因为decbin会自动将数字减为32。

它会这样做:您使用了什么代码?你得到了什么结果?var_dump6463334891^1000212390//显示7426059853I现在用我的代码更新post。如果我们不知道这些变量的值是什么,更新是毫无意义的。我已经这样做了,但在更改为int后,它为变量1提供了不同的值。例如,6463334891在应用int后,它为变量1提供的值是2147483647。
bindec(decbin($number))