Шаблон | Мнемоника | Описание преобразования |
---|---|---|
a | Arbitrary | произвольная последовательность байтов, дополненная нулевым байтом \0 |
A | ASCII | строка символов ASCII, дополненная пробелами |
b / B | Bit string | строка битов с возрастающим / убывающим порядком битов |
c / C | Character | однобайтовые символы со знаком / без знака |
f / d | Float / Double | число с плавающей точкой одинарной / двойной точности |
F | Float | число с плавающей точкой одинарной точности во внутреннем представлении (NV) |
D | long Double | длинное число с плавающей точкой двойной точности |
h / H | Hex string | шестнадцатеричная строка с младшим / старшим полубайтом (nybble) в начале |
i / I | Integer | целое (>=32 бита) число со знаком / без знака |
j / J | целое во внутреннем представлении со знаком (IV) / без знака (UV) | |
l / L | Long | длинное (32 бита) целое со знаком / без знака |
n / N | Network | беззнаковое короткое (16 битов) / длинное (32 бита) целое с сетевым порядком байтов (big endian) |
p / P | Pointer | указатель на строку, оканчивающуюся \0 / фиксированной длины |
q / Q | Quad | сверхдлинное (64 бита) целое число со знаком / без знака |
s / S | Short | короткое (16 битов) целое со знаком / без знака |
u | uuencoded | строка, кодированная по алгоритму uuencode |
U | Unicode | строка символов Unicode |
v / V | VAX | беззнаковое короткое (16 битов) / длинное (32 бита) целое с VAX-порядком байтов (little endian) |
w | целое, сжатое в соответствии с кодировкой BER | |
x | вставка \0 (pack) / пропуск байта по направлению вперед (unpack) | |
X | пропуск байта по направлению назад | |
Z | ASCIIZ | строка ASCIIZ (оканчивающаяся \0), дополненная \0 |
@ | заполнение \0 до указанной позиции |
Например, целочисленное значение, возвращаемое функцией
$record = pack 'l1 d1', time(), rand(); #
Вот еще несколько несложных примеров использования разных шаблонов для функции
$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'
Для преобразования данных из двоичного вида применяется функция
@list_of_values = unpack($template, $binary_record);
Кроме того, с помощью функции
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии