lea*_*n99 5 php bitwise-operators bitwise-xor
我在 php 阅读 xor ,我看到了这个例子:
$aa = "A" ^ "}";
echo $aa; // <
Run Code Online (Sandbox Code Playgroud)
所以我在互联网上搜索它是如何工作的,他们说它的总和是 ascii 代码,但上面的代码不是总和。
A = 65
} = 125
65 + 125 = 190
Run Code Online (Sandbox Code Playgroud)
我试图在另一个字符之间求和
$aa = "A" ^ "&";
echo $aa;
Run Code Online (Sandbox Code Playgroud)
但结果是 130 = g
那么超过 97 的任何字符都不是总和吗?
我也检查了这个问题 PHP XOR 字符串,但它没有帮助我。
是^
异或运算符,这意味着我们实际上正在使用二进制值。那么让我们来分析一下发生了什么。
二进制值上的 XOR 运算符将返回1
只有一位为 1 的位置,否则返回 0 ( 0^0 = 0
, 0^1 = 1
, 1^0 = 1
, 1^1 = 0
)。
正如您自己所说,当您使用XOR
字符时,您正在使用它们的 ASCII 值。这些 ASCII 值是整数,因此我们需要将它们转换为二进制以查看实际情况。让我们使用您的第一个示例,A
并且}
。
$first = 'A';
$second = '}';
$ascii_first = ord($first); // 65
$ascii_second = ord($second); // 125
Run Code Online (Sandbox Code Playgroud)
然后我们使用该函数将它们转换为二进制decbin()
。
$binary_first = decbin($ascii_first); // 1000001
$binary_second = decbin($ascii_second); // 1111101
Run Code Online (Sandbox Code Playgroud)
现在我们XOR
对这些二进制值使用运算符。
first 1000001
^
second 1111101
-------------------
result 0111100
Run Code Online (Sandbox Code Playgroud)
我们看到得到的二进制值为0111100
。使用该bindec()
函数我们将其反转回整数值
$final_ascii = bindec("0111100"); // 60
Run Code Online (Sandbox Code Playgroud)
我们看到我们得到了整数值 60。使用chr(60)
您将得到 ASCII 表中十进制值为 60 的字符 - 结果为<
。
这是一个显示步骤的现场演示:https://3v4l.org/Xd8SP - 您可以尝试一下,替换字符以查看不同字符组合的最终结果。