В PHP, что такое двоичная строка (b'xxxx ')?

Что означает b'' ( "двоичная строка" ) в выражении PHP $str=b'xxxxxx';?

Ответы

Ответ 1

$number = decbin(59);
echo $number . "\n"; //111011
$number = bindec($number);
echo $number . "\n"; //59

decbin (int $number): возвращает строку, содержащую двоичное представление аргумента заданного числа.

bindec (string $bstring): возвращает десятичный эквивалент двоичного числа в аргументе bstring.

Ответ 3

Двоичные строки были введены в PHP 5.2.1, но ожидалось, что они станут эффективными только начиная с PHP 6. Это была попытка различать Unicode и двоичные строки. Первый из них является новым строковым форматом, последний из которых является текущим форматом, но заменен на "b".

Как вы знаете, PHP 6 был оставлен, а формат строки не изменился. Обозначение "b" является лишь реликтом той эпохи.

'foobar' === b'foobar'; // true


Итак, теперь (PHP 5 и 7) двоичная строка является единственным строковым форматом. Кодирование символов (которое может быть многобайтным) управляется на "верхнем уровне", текстовым редактором, веб-браузером и т.д. Вы можете рассматривать двоичную строку как строку, состоящую из полного диапазона байтов 0-255.

Строку с непечатаемыми символами и т.д. можно манипулировать в PHP как любую другую строку, но вы получите отображение мусора. Также некоторые символы имеют особое значение: \0 отмечает завершение строки в C и SQL, есть управляющие символы и т.д. Поэтому, как только вы используете их вне PHP, вы, вероятно, столкнетесь с проблемами.

Например, random_bytes() создает такие строки.

Ответ 4

"двоичная строка" - это то, что мы имеем в php прямо сейчас - последовательность байтов, которая (в отличие от языка C) также может включать в себя nul байт. Это (или будет, как и php6) отличаться от строк unicode, которые являются последовательностями двухбайтовых символов.