PHP

Для чего нужны функции pack () и unpack () в PHP ?

Доброго времени суток.

Изучаю потихоньку PHP как первый язык программирования, застопорился на функциях pack() и unpack() - не могу понять их смысл. Я конечно понимаю что pack может упаковать данный в бинарную строку, а unpack наоборот. Но не совсем могу это осознать) может кто-то объяснит на пальцах так сказать, на понятных примерах)

я прочитал что pack, к примеру, может 16-битное значение представить в виде бинарной строки из двух байт по 8 бит к примеру, если $binarydata = pack("n", 0x1234);

то $binarydata будет содержать последовательность байтов: 0x12, 0x34,

но для чего это может понадобится на практике. ну разложили мы 16 бит на два по 8 бит, но зачем?

в литературе и в сети написано что pack () и unpack () применяются для того чтоб читать и создавать файлы с данными для взаимодействия с другими Языками программирования. я так понимаю это что то типа конвертора из одного формата в другой. На примере выше не понимаю как в данном случае поможет что pack() делает из 16 бит два по 8 бит ??

а ещё можно прочитать участок кода у gif-файла содержащий размер в пикселях, я так понимаю этот участок стандартный у всех gif-файлов и находится всегда в определенном месте скажем, в первых двух байтах. Тут вроде я правильно понял, поправьте если не так.
pack не "делает из 16 бит два по 8 бит". pack возвращает бинарное значение 0x1234 в виде строки из 2 байтов "\x12\x34".

В PHP содержимое бинарного файла - строка байтов. И только строка.

Во многих языках программирования можно прочитать два байта бинарного файла в числовую переменную или записать значение числовой переменной в 2 байта файла без дополнительных манипуляций. А в PHP так не получится. Прочитана может быть только строка и записана может быть только строка.

Потому, чтобы записать значение числа в файл в двоичном виде, это значение сначала надо преобразовать в строку (последовательность байтов), а потом эту строку записать в бинарный файл.

Аналогичные преобразования производятся при чтении бинарного файла: сначала читаем бинарный файл в строку, а потом части этой строки распаковываем в значения нужных типов.
ВА
Валерий Антонов
77 866
Лучший ответ
Сергей Лобанов Вы пишите что pack возвращает бинарное значение 0x1234 в виде строки из 2 байтов "\x12\x34".

если сделать так:

$binarydata = pack("n", 0x1234); echo $binarydata;
то результатом вывода будет: 4 а не "\x12\x34"
может всё-таки в строке не "\x12\x34" а что-то другое?
Например, если нужно какие-то бинарные данные распарсить, или наоборот, упаковать и записать. Да, по поводу gif - это один из примеров, как её можно использовать. Хотя, конечно, в PHP есть встроенная функция getimagesize и целых две библиотеки для работы с изображениями. Но есть также множество форматов, с которыми PHP из коробки не умеет работать, к примеру, анимированные PNG, или те же таблицы Excel. Так что примеров, когда они могут пригодится, много, хотя в жизни обычно проще установить готовую библиотеку для чтения нужного формата, чем писать свою (многое уже сделали до нас), но под капотом они активно используют функции pack и unpack.
SA
Sabur Artykov
87 839