Написать письмо авторам  
 

УЧЕБНИК PHP


справочник функций <Оnline>

Об учебнике

Обновление

Оглавление

  1. Основы PHP
  2. Операторы языка PHP
  3. Строковые функции

Продолжение следует




Строковые функции PHP

Предыдущая Следующая

Функции работы с бинарными данными

pack() 
unpack() 

Собственно, таких функций две – pack() и unpack(). Первая осуществляет пакетирование данных в двоичную строку, а вторая – распаковывает данные из двоичной строки. Лично у меня пока не было необходимости пользоваться этими функциями, кроме как при подготовке примеров их использования для этой главы. Но кто знает, может быть кому-то они очень нужны, поэтому мы с ними чуть-чуть повозимся.

Итак, функция:

pack()

Синтаксис:

string pack(string format [ ,mixed $args, ...])

Функция pack() упаковывает заданные в ее параметре аргументы в бинарную строку. Формат параметров и их количество задается при параметром $format, при помощи тех же спецификаторов форматирования, о которых мы говорили, только без знака %. После каждого спецификатора может стоять число, которое говорит о том, сколько информации будет обработано данным спецификатором. Для форматов a, A, h и H это число задает количество символов, которые будут помещены в бинарную строку из тех, что находятся параметре-строке при вызове функции (то есть, фактически определяется размер поля вывода строки). Если мы используем спецификатор "@", то мы определяем абсолютную позицию, в которую будут помещены данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае спецификатор действует на все оставшиеся данные. Заметим, что функция возвращает упакованные данные в шестнадцатеричном формате.

Список спецификаторов формата:

  • a - строка, свободные места в поле заполняются символом с кодом 0;
  • A - строка, свободные места заполняются пробелами;
  • h - шестнадцатеричная строка, младшие разряды в начале;
  • H - шестнадцатеричная строка, старшие разряды в начале;
  • c - знаковый байт (символ);
  • C - беззнаковый байт;
  • s - знаковое короткое целое;
  • S - беззнаковое короткое число;
  • n - беззнаковое целое (16 битов, старшие разряды в конце);
  • v - беззнаковое целое (16 битов, младшие разряды в конце);
  • i - знаковое целое (размер и порядок байтов определяется архитектурой);
  • I - беззнаковое целое;
  • l - знаковое длинное целое (32 бита, порядок знаков определяется архитектурой);
  • L - беззнаковое длинное целое;
  • N - беззнаковое длинное целое (32 бита, старшие разряды в конце);
  • V - беззнаковое целое (32 бита, младшие разряды в конце);
  • f - число с плавающей точкой;
  • d - число двойной точности;
  • x - символ с нулевым кодом;
  • X - возврат назад на 1 байт;
  • @ - заполнение нулевым кодом до заданной абсолютной позиции.


Функция

unpack()

Как уже говорилось выше, Распаковывает данные из двоичной строки согласно формату. Функция возвращает массив, содержащий распакованные элементы.

Синтаксис:

array unpack(string $format, string $data)

Давайте попробуем что-нибудь запаковать. К примеру, так.

<?
   $bin = pack("nvn*",0x5722,0x1148, 65, 66); // запаковываем, согласно формату
   $var = bin2hex($bin); // перекодируем из шестнадцатеричного формата
   echo($var);
?>

Итак, что мы увидели: функция вернула 6 байтов, причем в такой последовательности:

0х57, 0х22, 0х48, 0х11, 0х00, 0х41, 0х00, 0х42. Понятно, почему так. Согласно заданному нами формату (nvn*), первое число мы возвращаем как беззнаковое целое со старшими разрядами в конце, второе тоже как беззнаковое целое, только в конце – младшие разряды (поэтому нам вернулось 0х48, 0х11, а не 0х11, 0х48), и все остальное до конца мы возвращаем как беззнаковое целое со старшими разрядами в конце.



Предыдущая Следующая

 
  Наверх