Я видел этот код от ответ на PPCG:
echo BeeABBeeoBodBaBdOdPQBBgDQgDdp^"\n\n\t8b\n\n\t\nb&\nb b \n%%nb%%%\n%\nQ";
Я знаю, что PHP преобразует неопределенные константы в строки, поэтому эквивалентный код:
echo 'BeeABBeeoBodBaBdOdPQBBgDQgDdp' ^ "\n\n\t8b\n\n\t\nb&\nb b \n%%nb%%%\n%\nQ";
Выход из них:
Holy Hole In A Donut, Batman!
Может кто-нибудь объяснить мне, как XOR этих двух строк производит эту строку вывода?
В соответствии с этот официальный пример, с помощью XOR
Строки on будут работать со значениями ASCII каждого уважаемого символа, поэтому в вашем примере:
B
^ \n
= 66 ^ 10 = 72 = H
;e
^ \n
= 101 ^ 10 = 111 = o
;e
^ \t
= 101 ^ 9 = 108 = l
;Это просто применение xor
по два символа за раз по всей строке. Это делается путем преобразования в ASCII, и в результате получается значение ASCII, которое представляет собой разницу значений между двумя преобразованными элементами. Увидеть пример 2 в документации PHP. Итак, результат:
"B" ^ "\n" => 66 ^ 10 => 72 => "H"
И так далее по всей строке.