Читаем Язык программирования Perl полностью

Таблица 9.2. Шаблоны упаковки и распаковки данных
ШаблонМнемоникаОписание преобразования
aArbitraryпроизвольная последовательность байтов, дополненная нулевым байтом \0
AASCIIстрока символов ASCII, дополненная пробелами
b / BBit stringстрока битов с возрастающим / убывающим порядком битов
c / CCharacterоднобайтовые символы со знаком / без знака
f / dFloat / Doubleчисло с плавающей точкой одинарной / двойной точности
FFloatчисло с плавающей точкой одинарной точности во внутреннем представлении (NV)
Dlong Doubleдлинное число с плавающей точкой двойной точности
h / HHex stringшестнадцатеричная строка с младшим / старшим полубайтом (nybble) в начале
i / IIntegerцелое (>=32 бита) число со знаком / без знака
j / Jцелое во внутреннем представлении со знаком (IV) / без знака (UV)
l / LLongдлинное (32 бита) целое со знаком / без знака
n / NNetworkбеззнаковое короткое (16 битов) / длинное (32 бита) целое с сетевым порядком байтов (big endian)
p / PPointerуказатель на строку, оканчивающуюся \0 / фиксированной длины
q / QQuadсверхдлинное (64 бита) целое число со знаком / без знака
s / SShortкороткое (16 битов) целое со знаком / без знака
uuuencodedстрока, кодированная по алгоритму uuencode
UUnicodeстрока символов Unicode
v / VVAXбеззнаковое короткое (16 битов) / длинное (32 бита) целое с VAX-порядком байтов (little endian)
wцелое, сжатое в соответствии с кодировкой BER
xвставка \0 (pack) / пропуск байта по направлению вперед (unpack)
Xпропуск байта по направлению назад
ZASCIIZстрока ASCIIZ (оканчивающаяся \0), дополненная \0
@заполнение \0 до указанной позиции

Например, целочисленное значение, возвращаемое функцией time(), и дробное значение, возвращаемое функцией rand(), можно упаковать в переменную $record с помощью шаблона 'l1 d1', который означает: "одно длинное целое число (long) и одно число с плавающей точкой двойной точности (double)".

$record = pack 'l1 d1', time(), rand(); #

Вот еще несколько несложных примеров использования разных шаблонов для функции pack():

$bin = pack('a5', 'Yes'); # в $bin будет: 'Yes\0\0' $bin = pack('A5', 'Yes'); # в $bin будет: 'Yes ' $bin = pack('a4', 'abcd','x','y','z'); # в $bin: 'abcd' $bin = pack('aaaa', 'abcd','x','y','z'); # в $bin: 'axyz' $bin = pack('C2', 65,66,67); # в $bin будет: 'AB' $bin = pack('U2', 0x263A, 0x263B); # в $bin будет: '??' $bin = pack ('cxxc', 65,66); # в $bin будет: 'A\0\0B'

Для преобразования данных из двоичного вида применяется функция unpack(), которая распаковывает из скалярной переменной в список или массив значения двоичных данных в соответствии с указанным шаблоном.

@list_of_values = unpack($template, $binary_record);

Кроме того, с помощью функции unpack() можно из строки извлекать подстроки фиксированной длины. Например, так можно извлечь из записи файла поля определенной длины в переменные:

Перейти на страницу:

Похожие книги

Информатика: аппаратные средства персонального компьютера
Информатика: аппаратные средства персонального компьютера

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

Владимир Николаевич Яшин

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT
Цифровой журнал «Компьютерра» № 24
Цифровой журнал «Компьютерра» № 24

ОглавлениеБольшие новостиMicrosoft BizSpark: поиски инвесторов и менторов Автор: Григорий РудницкийNASA открыло виртуальную лунную базу Автор: Михаил КарповТерралабПромзона: Катушка с лупой Автор: Николай МаслухинPixel Qi: дисплеи, не слепнущие на солнце Автор: Юрий ИльинПромзона: Батарейки Microsoft Автор: Николай МаслухинСофт: Process Explorer — порнобаннер в прицеле Автор: Николай МаслухинSynaptics: тачпады нового поколения Автор: Олег НечайПромзона: Очки-суфлер Автор: Николай МаслухинМобильный интернет для малого бизнеса Автор: Максим БукинВещь дня: беззеркальная камера Lumix G2 Автор: Андрей ПисьменныйHDBaseT 1.0: дешёвая замена HDMI Автор: Олег НечайПромзона: Воздушный холодильник Автор: Николай МаслухинСофт: Настраиваем Ubuntu с помощью Ubuntu Tweak Автор: Крестников ЕвгенийПромзона: Бескрайний бассейн Автор: Николай МаслухинСпособы обмана в мобильных сетях Автор: Максим БукинСвоя играВасилий Щепетнёв: О пользе словаря Автор: Василий ЩепетневКивино гнездо: Человек против обмана Автор: Берд КивиMicrosoft: что пошло не так Автор: Андрей ПисьменныйКафедра Ваннаха: Скольжение к сингулярности Автор: Ваннах МихаилВасилий Щепетнёв: Гамбит Форт-Росс Автор: Василий ЩепетневКафедра Ваннаха: Облачное программирование и Пуэрто-Рико Автор: Ваннах МихаилВасилий Щепетнёв: Следы на целлулоиде Автор: Василий ЩепетневКивино гнездо: Конфликт криптографии и бюрократии Автор: Берд КивиИнтерактивЛюдмила Булавкина, директор YouDo по маркетингу, о любительском контенте Автор: Юрий ИльинМакс Зацепин и Глеб Никитин о музыкальной игре для iPad Автор: Юрий ИльинСергей Матиясевич (3D Bank) о рынке трёхмерных моделей Автор: Юрий ИльинВ. Репин (ИХБФМ СО РАН) о бактерии из вечной мерзлоты Автор: Алла АршиноваДмитрий Завалишин об операционной системе «Фантом» Автор: Андрей ПисьменныйБлогиАнатолий Вассерман: «Марс-500» Автор: Анатолий ВассерманКак большой оператор споткнулся о маленького SaaS-провайдера Автор: Анисимов КонстантинАнатолий Вассерман: Дальневосточные «партизаны» Автор: Анатолий ВассерманГолубятня-ОнлайнГолубятня: Сидр №4 Автор: Сергей ГолубицкийГолубятня: Бедность Автор: Сергей Голубицкий

Журнал «Компьютерра»

Зарубежная компьютерная, околокомпьютерная литература