ПредишенСледващото


Опаковката и разопаковането

Вероятно повечето уеб програмисти никога не са работили пряко с двоични данни от PHP.

И това се е случило, не само защото най-често двоичен обработка предприемат различни разширения или библиотеки. По-често това е свързано с факта, че информация в интернет, не е много, и че има - това е трудно да се разбере и е далеч от нуждите на конкретен разработчик.

За четене и писане на двоични данни в PHP, има две полезни функции:

Функцията пакет пакети данни в исканата от нашата маска формат, и дава изход низ в двоичен формат.
Разопаковайте функция изпълнява обратната трансформация. Тя очаква входния низ на двоичен формат и на изхода дава масив от данни във формат, познат ни.

За да разберете как да компресирате данни, трябва да прочетете за това как данните се съхраняват в паметта. Например от програмния език С разбира се.

Едно от предимствата на двоични данни

Да кажем: Ние трябва да пиша за номерата на файловете от нула до 256. Важно е, че файлът ще бъде лесно да се чете програми на други езици, както и че ще бъде размера, който му заема малко място.

запис на данни

Традиционният начин, щяхме да записва нещо като това:

Zapakovyvaya всеки байт индивидуално, ние бихме направили така:

Сега, за сравнение на размера на получения файл:

Т.е. файл, където ние опаковани всички стойности по-ниски в байтове, почти три пъти по-малък от партидата, в която всички стойности са написани като низ.

Изглежда, че спасен по обичайния начин файл:

И в този файл ценности опаковани в знак:

Внимателен разработчик веднага ще се отбележи причината за това подуване файл.

Това със сигурност е 0А символ. използвани като стойности на сепаратор (0x0A = 10 = нов ред), и че всеки от символите в променлива съхранява в байт. Например, когато това е необходимо, за да съхраните номера 248, 3 байта се записват 32 34 38.

четене на данни

Сега, когато се опитате да четат данни от файлове може да имате проблеми с четенето на опаковани данни. Какво би те ще получат около за четене на данни, както следва:

Както може би сте забелязали, Feature Pack отнема два аргумента необходими: форматен и стойност, или няколко стойности, които трябва да се опаковат.

С цел да се направи оценка на гъвкавостта на данни zapakovyvaniya нека се опитаме да решим този проблем.

Ние трябва да се прилагат на обмена на данни между програми, написани на различни езици.

Така че, се опаковат масив, съдържащ номера и струни. Имайте предвид, че ако номерата, които знаем размера, дори и да приемем, че броят е длъжен да се поберат в типа на Чар, т.е. от 0 до 256. Тази линия може да съдържа произволен брой символи.

За простота приемем, че линията трябва да се поберат в 256 знака, а след това можем да запишем броя на символите в низа за променлив пепел.

Тук е записан файл

Нека сега да се опитаме да прочетете файла

И ние ще се свържем масив:

Както можете да видите, че всичко е прости, дори сложни бинарни структури просто разглобени в PHP.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!