Создание серверных приложений на языке PERL
1eeb656d

Функция Pack



Функция Pack

pack (шаблон, список);

Упаковывает список в двоичную структуру по шаблону. Шаблон - это строка символов, описывающая порядок и тип упакованных значений.

  • A - текстовая строка, добавляется пробелами.
  • a - текстовая строка, добавляется 0 символом.
  • b - битовая строка (возрастающая нумерация бит)
  • B - битовая строка (убывающая нумерация бит)
  • h - шестнадцатеричная строка ( младший байт - первый)
  • H - шестнадцатеричная строка (старший байт первый)
  • c - символ со знаком
  • C - символ без знака.
  • s - короткое целое (один байт) со знаком.


  • S - короткое целое без знака.
  • i - целое (два байта) со знаком.
  • I - целое без знака.
  • l - длинное целое (4 байта) со знаком.
  • L - длинное целое без знака.
  • n - короткое в "сетевом" формате.
  • N - длинное в "сетевом" формате.
  • v - короткое в "VAX" формате.
  • V - длинное в "VAX" формате.
  • f - single float.
  • F - double float.
  • p - указатель на строку ограниченную 0.
  • P - указатель на структуру с фиксированной длиной.
  • u - упаковка uuencode.
  • x - нуль-байт
  • X - резервный байт.
  • @ - заполнить нулями позицию.

За каждой буквой может стоять число означающее количество повторов. Для всех типов за исключением 'a', 'A', 'b', 'B', 'h' и 'H', упаковывается максимально возможное количество значений из списка. Символ '*' после типа означает использовать оставшиеся параметры. Тип 'a' и 'A' использует только одно значение из списка и добавляет остаток поля либо нуль-символами, либо пробелами (при распаковке по типу 'A' пробелы и нули отбрасываются, а по 'a' - нет). Типы 'b' и 'B' упаковывают строку в указанное число бит. Так же как и 'h' и 'H' в число ниблов (байт). 'P' - упаковывает указатель на структуру с указанной длиной. Числа с плавающей запятой (floats и double) записываются в стандартном для каждой машины формате и могут быть разными для разных типов машин. Заметьте, что Perl всегда использует двойную точность (double), поэтому упаковка и распаковка по типу 'f' приведет к потере точности. Шаблоны для распаковки и упаковки совершенно одинаковы.

print(pack("ccc",65,66,67)); # Результат ABC print(pack("A4A3","ab","cdefg")); # "ab cde" print(pack("a4a3","ab","cdefg")); # "ab\0\0cde"

Содержание раздела