LINUX.ORG.RU

Работа с бинарными данными в PHP

 ,


1

1

А есть ли в PHP адекватный способ работы с бинарными данными? Ну прикинем, что мне нужно загрузить какой то файл и прочитать метаданные. Формат файла мне известен в виде сорца с описанием структуры на Сях. Кто нибудь может подсказать куда копать? Что есть кроме fread/unpack?



Последнее исправление: n0044h (всего исправлений: 1)

Читай fread() побайтно в строку, в пыхе строки это бинарные строки. Рассматривай поля структуры как набор чаров (по размеру), но учти, у пыха, например, нет ансайнед, у него всегда сайнед, хотя все это так же решается сдвигами. Еще глянь pack() там что-то было про эт самое.

А вообще, поищи, скорее всего есть готовые велосипеды или даже либы под твою задачу.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Под мою нет, точнее есть, но дальше Питона запала не хватило видимо, как то в PHP грустно с этим, имею ввиду манипулирование бинарщиной. Спасибо за совет!

n0044h
() автор топика

Есть пара функций pack/unpack, аналогичные perl-овским, как раз для бинарных данных.

amomymous ★★★
()

Что есть кроме fread/unpack?

А что тебе ещё надо, хороняка? Заверни всю кухню в класс с интерфейсом Serializible и вперёд, к победе коммунизма.

no-such-file ★★★★★
()

Накидай простую читалку метаданных на том же Си, вызывай её из PHP и читай выхлоп - самый правильный путь, в том числе и по быстродействию. Иначе нагородишь костылей на PHP, а когда изменится формат метаданных, придется в этих костылях разбираться.

JANB
()
Ответ на: комментарий от rikimaru

Почитай ТСа:

Формат файла известен в виде сорца с описанием структуры на Сях.

У него формат данных уже описан на Сишечке, скорее всего просто .h файл. Проще всего заинклюдить, создать экземпляр структуры, сделать memcpy и отправить поля структуры на stdout (хоть через запятую), а потом парсить их в ПиЭйчПях. Если изменится формат файла нужно будет поправить всего пару строк.

В общем, ты неправ.

JANB
()
Ответ на: комментарий от JANB

Проще всего заинклюдить, создать экземпляр структуры, сделать memcpy и отправить поля структуры на stdout (хоть через запятую), а потом парсить их в ПиЭйчПях

А можно не изобретать велосипед с квадратными колёсами, а просто использовать swig, раз уж припёрло делать обёртку.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

А можно не изобретать велосипед с квадратными колёсами

Можно и swig, но если я правильно понял ТС, то это будет оверхэд.

Да и использование Си сложно назвать велосипедом - оно в данной задаче весьма естесственно - ведь у ТСа уже есть файл на Си, это одно из условий задачи. Вполне разумно дописать пару строк.

JANB
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.