Распаковка строк бинарных данных в переменные языка Perl — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Распаковка строк бинарных данных в переменные языка Perl

2022-12-30 26
Распаковка строк бинарных данных в переменные языка Perl 0.00 из 5.00 0 оценок
Заказать работу

Для того чтобы скрипт получил доступ к бинарным данным, ондолжен распаковать их, перейдя в свой скалярный формат. СкриптыPerl распаковывают данные, используя функцию unpack, котораяимеет следующий формат:

$result = unpack(Template, Expression);

Expression является обычной строковой переменной, котораясодержит бинарные данные, прочитанные функцией sysread, но можетбыть также выражением, которое необходимо интерпретировать какстроку. Template представляет собой символьную строку-шаблон,описывающую, как интерпретировать значения в операнде Expression.Следующий фрагмент программы иллюстрирует использование функцииunpack:

($r, $g, $b) = unpack("C3", $color);# распакует в 3 символа

@longwords = unpack("L*", $data); # распакует в список длинных # слов @stuff = unpack("S2L", $bin); # распакует в 2 shorts и long

Каждый символ шаблона может сопровождаться числом, указывающим, сколько раз использовать этот символ. Если вместо числастоит звездочка (*), то операция будет выполняться для всех остающихся данных в строке. Если число не поставлено, то она выполняется однократно. Скрипт может поместить любое число символовшаблона в строку Template. В таблице 12.4 перечисляются символы,входящие в строковый параметр Template вместе с описанием влияния каждого из них на выполнение функции unpack.

Табл. 12.4. Символы шаблона

Символ шаблона Описание
a Строка ASCII без нулевого символа
А Строка ASCII без нулевого символа
b Битовая строка (младший бит идет первым)
В Битовая строка (старший бит идет первым)
с Однобайтовый символ со знаком
С Однобайтовый символ без знака
d Значение с плавающей запятой, двойной точности
f Значение с плавающей запятой, одинарной точности шаблона
h Строка шестнадцатиричных значений (младшие разряды идут первыми)
Н Строка шестнадцатиричных значений (старшие разряды идут первыми)
i Целое со знаком
I Целое без знака
l Целое со знаком типа long
L То же, только без знака
n Короткое целое
N Длинное целое
p Указатель на строку
s Короткое целое со знаком
S Короткое целое без знака
u Раскодировка строки
v Короткое целое
V Длинное целое
x Пропустить вперед один байт
X Пропустить назад один байт
@ Перейти на указанную позицию в строке

УПАКОВКА ДАННЫХ В БИНАРНЫЕ СТРОКИ

Для вывода бинарных данных скрипт должен запаковать скалярные величины в строки бинарных символов. Для этого используетсяфункция pack, формат которой указан ниже:

$result = pack(Template, List);

Следующий фрагмент программы иллюстрирует использование функции pack:

$color = pack("C3", $r, $g, $b); $data = pack("L*", @longword); $bin = pack("S2L", @stuff);

Функция pack использует те же самые символы шаблона, что ифункция unpack, за исключением символов а. А, и, х, X, @.

РАБОТА С КАТАЛОГАМИ

Perl предоставляет не только широкий набор функций для обработки файлов, но также несколько очень удобных функций для сканирования каталогов. В следующих разделах мы рассмотрим некоторыеиз основных функций для работы с каталогами в деталях.

ОТКРЫТИЕ, ЧТЕНИЕ И ЗАКРЫТИЕ КАТАЛОГОВ

Скрипты на языке Perl позволяют открывать и читать содержимое файлов. Точно так же эти скрипты открывают каталоги и читаютимена содержащихся в них слайдов. Для открытия каталога скриптыиспользуют функцию opendir, передавая указатель каталога и путь кнему. Для чтения списка файлов, содержащихся в каталоге, скриптиспользует функцию readdir. Наконец, для закрытия каталога используется функция closedir. Следующий фрагмент программы иллюстрирует использование функции readdir для того, чтобы вывести наэкран список файлов в текущем каталоге:

opendir(Dir, $INC[2]) || die; while ($file = readdir(Dir))  {      print "$file \n"  } closedir(Dir);

В этом фрагменте используется переменная $INC[2J для доступа к текущему каталогу. Изменяя $INC[2] на $ARGV[0], скрипт выводит на экран список файлов, содержащихся в каталоге, который выуказали в командной строке. В дополнение к функциям для работы скаталогами, которые были рассмотрены выше, Perl предлагает ещенабор фикций, которые позволяют позиционировать текущий указатель в списке каталога:

$result = rewinddir(DirHandle); $result = telldir(DirHandle); $result = seekdir(DirHandle, Position);

ФОРМАТИРОВАННЫЙ ВЫВОД

В этой главе вы познакомились с несколькими способами форматирования выходных данных скрипта с помощью функции print. Аналогично языку С, Perl также поддерживает функции printf и sprintf.В дополнение Perl также поддерживает генерацию отчетов в форместолбцов, используя шаблоны форм.

ИСПОЛЬЗОВАНИЕ ФУНКЦИИ PRINT

В этой главе скрипты широко использовали функцию print. Кроме того, Perl обеспечивает специальные переменные, которые влияютна работу функции print. В таблице 12.5 кратко характеризуютсяэти специальные переменные.

Табл. 12.5. Специальные переменные, которые управляют функциейпечати

Переменная Назначение
$, Разделитель для элементов печати
$" Разделитель элементов списка при интерполяции строки
$\ Разделитель для выходных записей
$# Форматирование числового выхода (по умолчанию '%.20g')

Для использования этих специальных переменных достаточнопросто присвоить им значения, которые вы хотите. Например, в следующем фрагменте программы используется переменная $ для того,чтобы задать сепаратор между элементами печати:

$, = '*'; @list = 1..10; print @list; # Выведет 1*2*3*4*5*6*7*8*9*10

Оказывается, что переменная $ на самом деле воздействует навсе строки, а не только на те, которые выводятся на печать. Однако чаще всего вы будете использовать ее для того, чтобы изменитьзначение, выводимое функцией print.


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.