Бинарные Данные

  • Автор темы Sergey_2003
  • Дата начала

Sergey_2003

Guest
Бинарные Данные

Здравствуйте уважаемый ALL!
Может, кто сталкивался с такой проблемой:

Есть файл BMP-шник, описание структуры BMP-шника в инете валом, вот только как работать с бинарными данными в PHP, нигде не нашёл.

Объясните не умному, или ткните носом в ман, как вытащить из бинарного файла данные в виде:
От 0-2 байта -> Сигнатура "BM"
от 2-4 байта -> Размер файла
от 10-14 байта -> Смещение изображения от начала файла
от 28 -30 байта -> Глубина цвета, бит на точку
от 46-50 байта -> Число используемых цветов
и т.д.

P.S. большая просьба не рассказывать о том, как хорошо можно использовать «Image functions», задача сугубо конкретная.
Заранее благодарен.
 

Sergey_2003

Guest
очень умно, нука попробуй у себя из BMP-шника выдрать со 2-6 байт и скажи, чему равняется размер файла?
 

WOrel

Guest
у тебя бмп файлом на винте валяется или ты сам его сгенерил?
если файлом то читай его побитово fseek'ом...
если ты генеришь, то вопрос видать не коректно поставлен...


su1d, если не сложно можно про pack() подробнее... недостаточное знания языка и отсутствие опыта не дают мне понять ман :( хотя очень интересно...
 

Sergey_2003

Guest
файл на винте валяяется но
PHP:
$fp=fopen($file, "rb");
fseek($fp, 2,SEEK_SET);
$data=fread($fp, 4);
echo $data."\n";
получаю hu??
а должно быть 30056
 

Sergey_2003

Guest
давайте ещё раз
PHP:
$fp=fopen($file, "rb");
fseek($fp, 2,SEEK_SET);
$data=fread($fp, 4);
$arr=unpack("nint",$data);
foreach($arr as $v) echo $v."\n";
получаем 26741
должно быть 30056

ну где грабли, чё делать?
 

GD

Guest
мне почему то думается (после проверки у себя) что правильнее будет

...
$arr=unpack("Lint",$data);
...

от обьяснений воздержусь, бо не уверен и т.д.
 

WOrel

Guest
и в прямь поGDшному работает...

всеже где выяснить что такое pack по понятние чем в пхп-мане?:confused:
 

su1d

Старожил PHPClubа
почитай вдумчиво про [m]pack[/m](), т.к. [m]unpack[/m]() -- это то же самое, только наоборот.
проведи параллель с [m]printf[/m]()/[m]sprintf[/m]() или [m]date[/m]() -- там принцип действия практически один и тот же.
 

Sergey_2003

Guest
Всё всем спасибо за ответы, нашол в перловой книге полное описание pack/unpack, заработало. савж можно закрывать
 
Сверху