Лучший белый каталог сайтов и статей
Каталог   Добавить ссылку   Добавить статью   Администрирование   Карта  
 

Мы будем Вам благодарны, если Вы поделитесь с друзьями ссылкой на Наш проект с помощью кнопок ниже:




Купить ссылку здесь за руб.
Поставить к себе на сайт


Хранение двоичных данных в строках

Решение

Для сохранения двоичных данных в строке применяется функция pack():

$packed = pack('S4',1974,106,28225,32725);

Функция unpack() позволяет извлекать двоичные данные из строки:

$nums = unpack('S4',$packed);

Обсуждение

Первым аргументом функции pack() является строка формата, который описывает способ кодировки данных, передаваемых остальными аргументами. Строка формата S4 указывает, что функция pack() должна сформировать из входных данных четыре беззнаковых коротких целых (short) 16-битных числа в соответствии с машинным порядком байтов. В качестве входа даны числа 1974, 106, 28225 и 32725, а возвращаются восемь байт: 182, 7, 106, 0, 65, 110, 213 и 127. Каждая двухбайтная пара соответствует входному числу: 7 × 256 + 182 = 1974; 0 × 256 + 106 = 106; 110 × 256 + 65 = 28225; 127 × 256 + 213 = 32725.

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

print_r($nums);

Array
(
[1] => 1974
[2] => 106
[3] => 28225
[4] => 32725
)

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

$nums = unpack('S4num',$packed);
print_r($nums);

Array
(
[num1] => 1974
[num2] => 106
[num3] => 28225
[num4] => 32725
)

В функции unpack() несколько символов форматирования должны разделяться символом /:

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);

Array
(
[a] => 1974
[b] => 106
[c] => 28225
[d] => 32725
)

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

Символ форматированияТип данных a Строка, дополненная символами NUL A Строка, дополненная пробелами h Шестнадцатеричная строка, первый полубайт младший H Шестнадцатеричная строка, первый полубайт старший c signed char C unsigned char s signed short (16 бит, машинный порядок байтов) S unsigned short (16 бит, машинный порядок байтов) n unsigned short (16 бит, обратный порядок байтов) v unsigned short (16 бит, прямой порядок байтов) i signed int (машинно-зависимый размер и порядок байтов) I unsigned int (машинно-зависимый размер и порядок байтов) l signed long (32 бита, машинный порядок байтов) L unsigned long (32 бита, машинный порядок байтов) N unsigned long (32 бита, обратный порядок байтов) V unsigned long (32 бита, прямой порядок байтов) f float (машинно-зависимый размер и представление) d double (машинно-зависимый размер и представление) x NUL-байт X Возврат на один байт @ Заполнение нулями по абсолютному адресу

 

Для a, A, h и H число после символа форматирования означает длину строки. Например, A25означает строку из 25 символов, дополненную пробелами. В случае других символов форматирования это число означает количество данных указанного типа, последовательно появляющихся в строке. Остальные возможные данные можно указать при помощи символа «*». С помощью функции unpack() можно преобразовывать различные типы данных. Этот пример заполняет массив ASCII-кодами каждого символа, находящегося в $s:

$s = 'platypus';
$ascii = unpack('c*',$s);
print_r($ascii);

Array
(
[1] => 112
[2] => 108
[3] => 97
[4] => 116
[5] => 121
[6] => 112
[7] => 117
[8] => 115
)



Комментарии:

Комментариев нет

Добавить свой комментарий:

Имя:

E-Mail адрес:

Комментарий:

Ваша оценка:

Введите число, которое Вы видите на картинке:
Информация
Источник:
http://www.сайты-всем.рф/files/php/hranenie-dvoichnih-dannih-v-strokah.php
Автор: Игорь
Категории:
Оценка модератора: Нет
Оценка пользователей: Нет
Переходов на сайт:0
Переходов с сайта:0
 
Яндекс.Метрика