Результат, повторяющий PHP pack ()… Нормально?

#php #binary #pack

#php #двоичный #пакет

Вопрос:

Этот код:

 <?php

$string = "I love chicken.";
$binary = pack("a15", $string);
echo $binary;

?>
  

Выводит «Я люблю курицу». Это нормально? Разве он не должен выводить какую-то двоичную тарабарщину?

Комментарии:

1. О, как я ненавижу слово «нормальный»… Почему бы не использовать что-то вроде «correct»? Или слово, которое действительно что-то описывает, а не является ссылкой на неопределенный термин?

2. @Zirak 1) Не помогает. 2) Это не ссылка на неопределенный термин, это сам расплывчатый термин. 3) За исключением того, что это не совсем расплывчато, поскольку вы четко поняли это из контекста.

Ответ №1:

Да, это нормально. Вы упаковываете 15-символьную строку в 15-байтовую строку с заполнением нулем, поэтому здесь нет «тарабарщины» (потому что ваша исходная строка хранится в памяти «таким образом».) Вы бы увидели тарабарщину, если бы, например, попытались упаковать целые числа и т.д.

Ответ №2:

Почему? «Двоичное» представление строки (в однобайтовой кодировке) является именно этой строкой, поэтому в этом случае нет необходимости что-либо преобразовывать.

Ответ №3:

Нет, если вы упаковываете строку ASCII как строку ASCII той же длины. Если вы измените a15 на a16, то pack дополнит вывод значениями null, которые не видны при выполнении echo, но видны при выполнении var_dump()