Побитовый результат операции, странное поведение при выводе - PullRequest
1 голос
/ 19 июня 2011

Похоже, мой предыдущий вопрос обновление не было замечено, поэтому новый вопрос.

#dump1
var_dump('two identical strings' | 'two identical strings'); # mind the |
// string(21) "two identical strings"

#dump2
var_dump('two identical strings' ^ 'two identical strings'); # mind the ^
// string(21) ""

Почему #dump2 показывает, что длина == 21, но не выводит никаких / невидимых символов?

Кроме того, при вставке в Notepad ++ внутри этой строки также нет признаков 21 символа, ну, собственно, даже 1 символа, в отличие от этого вывода из другой операции с неравными строками. enter image description here
Эти (DC3), (DC4) и т. Д. Не отображаются в браузере, но отображаются в Notepad ++.

О, и вообще, что это за черноватые значения внутри этой строки? Я предполагаю, что это значения битового уровня / уровня ассемблера, но, да, guess !== true.

Заранее спасибо!

1 Ответ

7 голосов
/ 19 июня 2011

XOR для последовательности байтов сам по себе устанавливает все биты равными 0. Таким образом, у вас есть длинная строка из x00 байтов, то есть символ NUL, который не имеет читаемого представления на экране.Выполнение побитовых операций с любой строкой обычно приводит к довольно случайным битовым последовательностям, которые не могут отображаться на экране в виде читаемых символов.Этот случайный черный материал, который вы видите, это Notepad ++, который старается изобразить последовательность байтов.

...